1. m을 처리할때 12보다 큰 12의 배수인 경우, m에 0이 아니라 12가 할당되도록 해주어야하는데 거기까지 고려를 못했다. 케이스를 꼼꼼히 따져봐야겠다.
func solution(_ today:String, _ terms:[String], _ privacies:[String]) -> [Int] {
let today = today.split(separator: ".").map { Int($0)! }
let (ty, tm, td) = (today[0], today[1], today[2])
var answer: [Int] = []
var dict: [String: Int] = [:]
for term in terms {
let term = term.split(separator: " ").map { String($0) }
dict[term[0]] = Int(term[1])
}
for (i, privacy) in privacies.enumerated() {
let privacy = privacy.split(separator: " ").map { String($0) }
let (date, kind) = (privacy[0], privacy[1])
let ymd = date.split(separator: ".").map { Int($0)! }
var (y, m, d) = (ymd[0], ymd[1], ymd[2])
d += 27
m += dict[kind]! - 1
if d > 28 { m += 1; d %= 28 }
if m > 12 { y += m % 12 == 0 ? m / 12 - 1 : m / 12 ; m = m % 12 == 0 ? 12 : m % 12 }
if ty > y || (ty == y && tm > m) || (ty == y && tm == m && td > d) { answer.append(i + 1) }
}
return answer
}
2. 체육복 문제
여벌이 있는 학생이 도난당한 경우 lost, reserve 에서 모두 제외해야하고,
배열이 오름차순으로 주어진다는 조건이 없음을 고려해야했던 문제
func solution(_ n:Int, _ lost:[Int], _ reserve:[Int]) -> Int {
var lostArr = Set(lost).subtracting(reserve).sorted()
var reserveArr = Set(reserve).subtracting(lost).sorted()
for r in reserveArr {
if lostArr.contains(r - 1) {
let index = lostArr.firstIndex(of: r - 1)!
lostArr.remove(at: index)
continue
}
if lostArr.contains(r + 1) {
let index = lostArr.firstIndex(of: r + 1)!
lostArr.remove(at: index)
}
}
return n - lostArr.count
}
3. swapAt을 쓰면 되는데, 인덱스를 어떻게 구하냐의 문제이다.
firstIndex(of:)를 사용하는 경우 players의 크기가 너무 커졌을때 시간초과가 난다.
그래서 해쉬값처럼 쓸수있도록 딕셔너리로 만들어 시간복잡도를 줄이는 방법으로 접근해야한다.
func solution(_ players:[String], _ callings:[String]) -> [String] {
var result = players
var dict: [String: Int] = [:]
for (i, player) in players.enumerated() {
dict[player] = i
}
for call in callings {
let i = dict[call]!
result.swapAt(i - 1, i)
dict[result[i - 1]]! -= 1
dict[result[i]]! += 1
}
return result
}
'TIL' 카테고리의 다른 글
[240413] Decimal to Int (0) | 2024.04.13 |
---|---|
[240401] Dictionary(grouping:by:)/if let과 guard let (0) | 2024.04.01 |
[240330] 이중배열과 enumerated/contains(where:) (0) | 2024.03.31 |
[240329] index(_:offsetBy:)/contains()/isSubset(of:)/이중배열 enumerated() (0) | 2024.03.29 |
[240328] ArraySlice (0) | 2024.03.28 |