반응형
LinkedIn 개발자로 성장하면서 남긴 발자취들을 확인하실 수 있습니다.
Github WWDC Student Challenge 및 Cherish, Tiramisul 등 개발한 앱들의 코드를 확인하실 수 있습니다.
개인 앱 : Cherish 내 마음을 들여다보는 시간, 체리시는 디자이너와 PM과 함께 진행 중인 1인 개발 프로젝트입니다.
10년 후, 20년 후 나는 어떤 스토리 텔러가 되어 있을지 궁금하다. 내가 만약에 아직 조금 더 탐구하고 싶은 게 있고, 궁금한 게 있다면, 그게 설사 지금 당장의 내 인생에 도움이 안 되는 것 같더라도 경험해보자. 그 경험들을 온전히 즐기며 내 것으로 만들고, 내 일에 녹여내고... 그러다보면 그 점들이 모여 나란 사람을 그려내는 선이 될 테니까.

Recent Posts
Recent Comments
Total
관리 메뉴

꿈꾸는리버리

프로그래머스 ) 추억 점수 본문

오뚝이 개발자/알고리즘

프로그래머스 ) 추억 점수

rriver2 2023. 5. 15. 14:06
반응형

 추억 점수 문제 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 문제 풀이 

달리기 경주 문제와 동일하게 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 값을 모두 더한 총 합이 반환되며, 이 값은 정수 배열로 반환된다. 

반응형
Comments