프로그래머스 - 영어 끝말잇기
·
Algorithm/programmers
import Foundationfunc solution(_ n:Int, _ words:[String]) -> [Int] { var stack: [String] = [] var previous: Character = words.first!.last! var num = 1 var cycle = 1 for word in words { if num > n { num = 1 cycle += 1 } if stack.isEmpty { stack.append(word) } else { if stack.contains(word) |..
프로그래머스 - 멀리 뛰기 feat. DP
·
Algorithm/programmers
DP 를 사용하여 쉽게 구현하였습니다  func solution(_ n:Int) -> Int { var arr = [1,1,2] if n
프로그래머스 - 점프와 순간 이동 feat. 최소 연산횟수
·
Algorithm/programmers
당연히 DP 로 접근해야 한다고 생각하였습니다. 하지만 배열을 만들어서 접근하게 될 경우 시간초과가 발생하여 다른 방법을 모색해야 했습니다.import Foundationfunc solution(_ n:Int) -> Int{ var answer: [Int] = [1,1,1] if n  문제 이해하기문제에서 현재 위치를 2배로 건너뛰는 것은 비용이 발생하지 않습니다, 그렇기 때문에 2로 나누어 떨어진다면 비용을 증가시키지 않고 만약 현재 위치가 2로 떨어지지 않는다면 -1 만큼 감소시키고 비용을 1씩 증가시키는 것으로 문제를 접근할 수 있겠습니다.import Foundationfunc solution(_ n:Int) -> Int{ var answer = 0 var a = n ..
프로그래머스 - 예상 대진표
·
Algorithm/programmers
import Foundationfunc solution(_ n:Int, _ a:Int, _ b:Int) -> Int { var count = 0 var A = a var B = b while A != B { A = (A + 1) / 2 B = (B + 1) / 2 count += 1 } return count}
프로그래머스 - 짝지어 제거하기 feat. 스택
·
Algorithm/programmers
시간초과 문제스택이 아닌 String 으로 문제를 접근하였을 때 시간 초과가 발생하였습니다.while 문 내부에 for 문으로 데이터를 계속 수정하는 방식은 입력값이 클 경우에는 매우 효율적이지 못했습니다.import Foundationfunc solution(_ s:String) -> Int{ var answer = s var sets = Set(answer.map { Character(String($0)) }) while true { let previous = answer for set in sets { answer = answer.replacingOccurrences(of: "\(set)\(set)", with: "") } ..
프로그래머스 - 카펫 feat. 완전탐색
·
Algorithm/programmers
import Foundationfunc solution(_ brown:Int, _ yellow:Int) -> [Int] { let sum = brown + yellow let b = brown / 2 var answer: [Int] = [] for i in (3...b) { if sum % i == 0 { for j in (3...b) { if i*j == sum && i >= j && (i-2)*(j-2)==yellow { answer = [i, j] } } } } return answer}
ytw_developer