1. 처음에는 0...i 그리고 i+1..<topping.count 를 각각 Set으로 만들어 요소의 갯수를 비교해주었는데, 모든 케이스가 시간초과되었다. 배열을 슬라이스하는 것은 많은 비용이 든다고 하니 되도록 쓰지 않아야겠다. 아래 풀이는 어떤 블로그를 참고했다. 동생은 끝에서부터 순회하도록 한 것이 새로웠다. stride 대신 Array(0..<topping.count).sorted(by: >) 이렇게 표현할 수도 있겠지만 stride의 활용을 상기시킬 수 있어서 좋았다.
func solution(_ topping:[Int]) -> Int {
var older: [Int: Int] = [:]
var olderSet: Set<Int> = []
var younger: [Int: Int] = [:]
var youngerSet: Set<Int> = []
var answer = 0
for i in 0..<topping.count {
olderSet.insert(topping[i])
older[i] = olderSet.count
}
for i in stride(from: topping.count - 1, to: -1, by: -1) {
youngerSet.insert(topping[i])
younger[i] = youngerSet.count
if older[i - 1] == younger[i] { answer += 1 }
}
return answer
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv2. 뒤에 있는 큰 수 찾기 (0) | 2024.04.23 |
---|---|
[프로그래머스] Lv.2 k진수에서 소수 개수 구하기 (0) | 2024.04.18 |
[프로그래머스] Lv.2 피로도 문제 (0) | 2024.04.16 |
[프로그래머스] Lv.2 괄호 회전하기 문제 (0) | 2024.04.13 |
[프로그래머스] Lv.2 n^2 배열 자르기 문제 (0) | 2024.04.13 |