⚙️ 알고리즘 59

[Swift] 프로그래머스 - 문자열 압축 (Level. 2)

문제 https://school.programmers.co.kr/learn/courses/30/lessons/60057?language=swift 코드 import Foundation func solution(_ s:String) -> Int { let N = s.map { String($0) } if N.count == 1 { return 1 } var array = [N.count] //맨 처음 비교대상은 한번도 압축이 되지 않을때, 즉 문자열 자체의 길이 var answer = "" var prev = "" var count = 1 for step in 1...N.count/2 { //최대로 압축할 수 있는 범위가 문자열 절반의 길이 answer = "" prev = N[0.. N.count - 1..

[Swift] 백준 1080 - 행렬

문제 https://www.acmicpc.net/problem/1080 1080번: 행렬 첫째 줄에 행렬의 크기 N M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 행렬 A가 주어지고, 그 다음줄부터 N개의 줄에는 행렬 B가 주어진다. www.acmicpc.net 코드 let input = readLine()!.split(separator:" ").map { String($0) }.map{ Int($0)!} let N = input[0] let M = input[1] var A:[[Int]] = [] var B:[[Int]] = [] var cnt = 0 for _ in 0...N-1 { A.append(readLine()!.map { String($0) }.map..

[Swift] 백준 1541 - 잃어버린 괄호

문제 https://www.acmicpc.net/problem/1541 코드 var array = readLine()!.split(separator: "-").map { String($0) } array = array.filter { $0 != "" } //공백제거 var sum = 0 var count = 0 var sum_array:[Int] = [] for i in array { count = i.split(separator:"+").map { Int($0)!}.reduce(0, +) sum_array.append(count) } if sum_array.count == 1 { // "+"만 있는 경우 -> 위에서 array의 count가 1이기 때문에 더한 값이 있는 배열의 크기도 1임 print(..

[Swift] 백준 10610 - 30

문제 https://www.acmicpc.net/problem/10610 코드 let input = readLine()!.map{ String($0) } //쪼개서 정수 배열로 저장 var sum = 0 if !input.contains("0"){ print(-1) } else{ for i in input { sum += Int(i)! } if sum%3 == 0 { print(input.sorted(by: >).joined()) } else{ print(-1) } } 풀이 30의 배수임을 판별하기 위해서는 끝이 0이 아닌지와 각 자릿수를 더한 값이 3의 배수인지를 판별하면 된다. 따라서 input에 0이 들어가있지 않으면 30의 배수가 아니므로 바로 -1을 프린트해주었고, 다 더했을 때 3의 배수이면 ..

[Swift] 프로그래머스 입문 - 겹치는 선분의 길이

문제 https://school.programmers.co.kr/learn/courses/30/lessons/120876 선분 3개가 평행하게 놓여 있습니다. 세 선분의 시작과 끝 좌표가 [[start, end], [start, end], [start, end]] 형태로 들어있는 2차원 배열 lines가 매개변수로 주어질 때, 두 개 이상의 선분이 겹치는 부분의 길이를 return 하도록 solution 함수를 완성해보세요. lines가 [[0, 2], [-3, -1], [-2, 1]]일 때 그림으로 나타내면 다음과 같습니다. 선분이 두 개 이상 겹친 곳은 [-2, -1], [0, 1]로 길이 2만큼 겹쳐있습니다. 제한사항 lines의 길이 = 3 lines의 원소의 길이 = 2 모든 선분은 길이가 1 ..

[Swift] 프로그래머스 코딩테스트 입문 - 구슬을 나누는 경우의 수

문제 설명 머쓱이는 구슬을 친구들에게 나누어주려고 합니다. 구슬은 모두 다르게 생겼습니다. 머쓱이가 갖고 있는 구슬의 개수 balls와 친구들에게 나누어 줄 구슬 개수 share이 매개변수로 주어질 때, balls개의 구슬 중 share개의 구슬을 고르는 가능한 모든 경우의 수를 return 하는 solution 함수를 완성해주세요. 제한사항 1 ≤ balls ≤ 30 1 ≤ share ≤ 30 구슬을 고르는 순서는 고려하지 않습니다. share ≤ balls 입출력 예 balls share result 3 2 3 5 3 10 입출력 예 설명 입출력 예 #1 서로 다른 구슬 3개 중 2개를 고르는 경우의 수는 3입니다. 입출력 예 #2 서로 다른 구슬 5개 중 3개를 고르는 경우의 수는 10입니다. Hi..

[Swift] 프로그래머스 / 코딩테스트 입문 - 합성수 찾기

문제 내 풀이 func solution(_ n:Int) -> Int { var count = 0 var answer = 0 for i in 1...n {//1부터 10까지 for j in 1...i{ if i%j == 0{ count += 1 } } if count >= 3 { answer += 1 } count = 0 } return answer } 고차함수 활용 풀이 return (1...n).filter { i in (1...i).filter { i % $0 == 0 }.count >= 3 }.count 1) (1...n).filter : 1부터 n까지의 range에서 다음과 같은 조건으로 필터링하겠다. 2) i in (1...i).filter { i % $0 == 0 : 1부터 n까지 반복해서, ..

[Swift] 코딩테스트에 필요한 문법 총정리

문자열/컬렉션 문자열/배열 ✅ 배열 초기화 https://developer.apple.com/documentation/swift/array // Shortened forms are preferred var emptyDoubles: [Double] = [] var emptyDoubles = Array() var emptyDoubles = [Double]() // The full type name is also allowed var emptyFloats: Array = Array() var numbers = [1, 2, 3, 4 ,5] var answer = Array(numbers[1...3]) print(answer) // Prints "[2, 3, 4]" var ex_4 = Array(1...10) /..

[Swift/Python] 코테 준비에 알아두면 좋을 사항 / 코드

Swift, Python 둘다 준비해서 코드가 섞여있습니다. Swift ✅ 시간초과가 발생할 경우, 아래를 살펴보자. 1) 고차함수를 많이 사용하지는 않았는가? 반복문 안에 고차함수가 들어가있지는 않은가? 2) 배열 대신 튜플을 사용할 수 있는가? 3) 수의 범위가 큰데 반복문을 2-3개씩 돌린다거나 하지는 않는가? -> 시간복잡도 확인 4) 백준이고, 위 문제 모두 아니고 알고리즘이 맞는것 같은데 시간초과가 난다..? 하면 백준 특유의 시간초과 문제일 수 있음. - 이럴땐 FileIO 클래스를 사용하자. (라이노님 FileIO 클래스 외에도 더 빠른 FileIO가 있다고 함) -> 하지만 백준에서만 해당 파일을 사용할 일이 있고 코딩테스트에서는 쓸일이 없어서 .. 그냥 파이썬 코드 그대로 옮겨보고 맞는..

반응형