- Total
꿈꾸는리버리
프로그래머스 ) 추억 점수 본문
추억 점수 문제
문제 풀이
달리기 경주 문제와 동일하게 Dictionary(uniqueKeysWithValues: zip(A,B))를 활용하면 쉽게 풀 수 있는 문제라고 생각했고, 코드 구현하고 1차 테스트 만에 완료해서 뿌듯.. 했었다.
import Foundation
func solution(_ name:[String], _ yearning:[Int], _ photo:[[String]]) -> [Int] {
let missingPointDic = Dictionary(uniqueKeysWithValues: zip(name,yearning))
var result: [Int] = []
for _photo in photo {
var missing_point = 0
for name in _photo {
if let point = missingPointDic[name] {
missing_point += point
}
}
result.append(missing_point)
}
return result
}
알게 된 것
하지만 다른 사람의 풀이를 보니까.. 더 이지이지 하게 풀었던 것...
reduce의 개념에 대해서는 알고 있었지만, 친숙하게 써본 적은 없기에 이걸 활용해야 겠다는 생각을 못했었다.
import Foundation
func solution(_ name:[String], _ yearning:[Int], _ photo:[[String]]) -> [Int] {
let score: [String: Int] = Dictionary(uniqueKeysWithValues: zip(name, yearning))
return photo.map { $0.reduce(0) { $0 + (score[$1] ?? 0) } }
}
reduce 풀이
위의 식 photo.map { $0.reduce(0) { $0 + (score[$1] ?? 0) } }는 2차원 배열 photo를 매핑하여 각각의 배열 요소에 대해 reduce 함수를 적용한 결과를 반환한다.
reduce 함수는 해당 배열의 모든 요소를 하나의 값으로 줄이는 과정을 수행하는데, 위 코드에서는 0을 초기값으로 설정하였다. 그리고 이후 { $0 + (score[$1] ?? 0) } 클로저 내부에서는 요소 값을 누적하여 더해나간다. 이 때, 클로저에서 $0는 누적값을, $1은 배열 요소 값을 나타낸다.
{ $0 + (score[$1] ?? 0) }는 이전까지 누적된 값($0)에 현재 배열 요소값의 score 값을 더하여 새로운 값을 반환한다. 이 때, (score[$1] ?? 0)는 현재 배열 요소값에 해당하는 score 값을 가져와서 더하되, 해당 값이 nil일 경우 0으로 처리함을 의미한다.
따라서, photo 배열의 각 요소에 대해 score 값을 모두 더한 총 합이 반환되며, 이 값은 정수 배열로 반환된다.
'오뚝이 개발자 > 알고리즘' 카테고리의 다른 글
프로그래머스) 공원 산책 (0) | 2023.05.15 |
---|---|
프로그래머스 ) 달리기 경주 (2) | 2023.05.12 |
[Swift][백준 알고리즘] 10972 다음 순열 (0) | 2022.05.18 |
[Swift][백준 알고리즘] 15649 N과 M (1) (0) | 2022.04.26 |
[swift][백준 알고리즘] 6064 카잉 달력 (0) | 2022.04.20 |