프로그래머스 - 메뉴 리뉴얼 feat. dfs
·
Algorithm/programmers
조합은 for 문으로 구현할 수도 있지만 dfs 로도 경우의 수를 만들어낼 수 있습니다   import Foundationfunc solution(_ orders:[String], _ course:[Int]) -> [String] { var menus: [String:Int] = [:] for order in orders { let ordered = order.sorted() for courseSize in course { let combinations = makeCombination(courseSize, ordered) for combination in combinations { ..
프로그래머스 - k진수에서 소수 개수 구하기
·
Algorithm/programmers
import Foundationfunc isPrimeNumber(_ n: Int) -> Bool { if n == 1 { return false } for i in 2.. Int { var converted = "" var tmp = n while tmp >= 1 { converted += String(tmp % k) tmp /= k } var convertedList = converted.reversed().map { String($0) } print(convertedList.joined()) var answer = 0 var savedValue = "" while !convert..
프로그래머스 - 튜플
·
Algorithm/programmers
이때 튜플은 빈도수로 많이 나온 값이 앞에 오도록 정렬하는 문제입니다 import Foundationfunc solution(_ s:String) -> [Int] { var answer: [Int:Int] = [:] var list = s while !list.isEmpty { var tmp = "" if list.removeLast() == "}" { if list.last! == "}" { list.removeLast() } while list.last != "{" { tmp += String(list.remove..
프로그래머스 - [1차] 캐시
·
Algorithm/programmers
LRU는 가장 오랫동안 쓰이지 않던 값을 캐시에서 없앤다는 특징이 있습니다 LRU란?LRU는 Least Recently Used 의 약자로 가장 오랫동안 사용되지 않는 값을 지우는 페이지 교체 알고리즘 입니다.즉 구현하기 위해서는 캐시의 크기를 넘게 값이 들어오게 되면 제일 오래된 값을 비우고 새로운 값을 추가해야합니다. 캐시란?캐시는 메모리와 CPU 간의 속도 차이를 완화하기 위해 메모리의 데이터를 미리 가져와 저장해두는 임시 장소입니다.필요한 데이터를 미리 가져와 저장하여 새로운 값을 검색할 때 메모리로 값을 찾아가는 대신 캐시를 먼저 확인 후 원하는 데이터를 가져감으로서 속도를 향상시킵니다. 캐시 히트: 원하는 데이터를 캐시에서 검색했을 때 존재하는 경우, 해당 데이터를 바로 사용할 수 있게 됩니다..
프로그래머스 - 주차 요금 계산 (2022카카오 블라인드 채용)
·
Algorithm/programmers
주차 요금 계산은 딕셔너리로 해결할 수 있는 구현 문제입니다  import Foundationfunc solution(_ fees:[Int], _ records:[String]) -> [Int] { var dics: [String: Int] = [:] var cars: [String: Int] = [:] var totalFees: [String: Int] = [:] for record in records { let info = record.split(separator: " ").map { String($0) } let time = info[0].split(separator: ":").map { Int($0)! } let minute = t..
프로그래머스 - 두 큐 합 같게 만들기 (2022카카오 테크 인턴쉽) 시간초과 해결
·
Algorithm/programmers
시간초과 발생 코드아래대로 구현한다면 로직은 맞지만 시간초과가 발생합니다.이유는 removeFirst() 로 처리하기에는 시간복잡도가 허용하지 않기 때문입니다. removeFirst() 를 사용하게 되면 첫번째 값을 뺀 다음 뒤에있는 모든 값들을 모두 한칸씩 앞으로 땡겨야하는 부담이 발생하기 때문에 로직은 간단해질 수 있지만 성능적인 면은 조금 떨어집니다.func solution(_ queue1:[Int], _ queue2:[Int]) -> Int { var cnt = 0 var q1 = Queue() queue1.forEach { value in q1.enqueue(value) } var q2 = Queue() queue2.forEach { value..
ytw_developer