var sortedDictionary = a.sorted { $0.1 > $1.1 }
이런식으로 해주니까 다음처럼 튜플형태? 처럼 바꼈는데 이걸 원한건 아니었다.
[(key: 3, value: 2), (key: 5, value: 2),
(key: 2, value: 2), (key: 4, value: 1), (key: 1, value: 1)]
좀 더 서칭을 해본 결과 다음과 같이 해결을 할 수 있었다. 그냥 map써서 키값만 뽑아주면 되었었다.
var sortedDictionary = a.sorted { $0.1 > $1.1 }.map { $0.key }
[5: 2, 4: 1, 3: 2, 1: 1, 2: 2]
[5, 3, 2, 4, 1]
순서대로 5 ,3, 2, 4, 1 순서대로 잘 배열로 나타내진 것을 볼 수 있다.
이제 이걸 반복문 돌리면서 참조로 활용한다음 귤의 갯수가 target에 맞춰질 때까지 돌리면된다.
import Foundation
func solution(_ k: Int, _ tangerine: [Int]) -> Int {
var a: [Int: Int] = [:]
for tang in tangerine {
a[tang, default: 0] += 1
}
var sortedDictionary = a.sorted { $0.1 > $1.1 }.map { $0.key }
var count = 0
var categoryCount = 0
for item in sortedDictionary {
count += a[item]! // 귤 갯수 더해주기
categoryCount += 1
if count >= k {
break
}
}
return categoryCount
}
채점 결과
정확성: 100.0
합계: 100.0 / 100.0
타인의 코드
import Foundation
func solution(_ k:Int, _ tangerine:[Int]) -> Int {
var map = [Int: Int]()
tangerine.forEach { map[$0, default: 0] += 1 }
var idx = 0, sum = 0
for tanger in map.sorted { $0.value > $1.value } {
sum += tanger.value; idx += 1
if sum >= k { break }
}
return idx
}
엄청 유사한 것 같았다.
var sortedDictionary = a.sorted { $0.1 > $1.1 }.map { $0.key }
이렇게 따로 선언을 해주고 거기서 반복문을 돌린 반면 이분은
for tanger in map.sorted { $0.value > $1.value }
이렇게 걍 한줄로서 한번에 해준것이 좀 차이가 있었고 더 간결해서 좋은 것 같았다.
추가로 배운거는
for tang in tangerine {
a[tang, default: 0] += 1
}
default로 없으면 0 해주는걸 아예 내장된 기능으로 활용할 수 있다는 거 터득할 수 있었다.
count += a[item]! // 귤 갯수 더해주기
이렇게 억지로 item이 없을때에 대비하는 것 때문에 강제 언래핑을 해주었는데, 다음부터는 나온대로 좀 활용해야겠다 싶었다.