본문 바로가기

CS/알고리즘

[230422] 추억 점수

반응형

 

문제

https://school.programmers.co.kr/learn/courses/30/lessons/176963

 

프로그래머스

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

programmers.co.kr

 

풀이

내 풀이

function solution(name, yearning, photo) {
    return photo.map(pho => 
        pho.reduce((acc, cur) => {
            if(name.includes(cur)) return acc + yearning[name.indexOf(cur)];
            return acc 
        }, 0)
   )
}

map과 reduce를 사용하여 풀이했다.

들어오는 이름이 name에포함되어 있으면, yearning의 해당 점수를 acc에 더해서 반환한다.

 

function solution(name, yearning, photo) {
    return photo.map(pho => 
        pho.reduce((acc, cur) => { 
            if(name.indexOf(cur) === -1) return acc 
            return acc + yearning[name.indexOf(cur)]
        }, 0)
   )
}

이렇게도 풀 수 있겠고, 중복이 싫으면

function solution(name, yearning, photo) {
    return photo.map(pho => 
        pho.reduce((acc, cur) => { 
            const idx = name.indexOf(cur)
            
            if(idx === -1) return acc 
            return acc + yearning[idx]
        }, 0)
   )
}

정리하는 게 더 나아보인다.

 

 

더럽지만 한 줄로도 나타낼 수는 있음.

function solution(name, yearning, photo) {
    return photo.map(pho => pho.reduce((acc, cur) => acc + (name.includes(cur) ? yearning[name.indexOf(cur)] : 0), 0)
   )
}

 

 

 

 

다른 풀이

Map으로 푼 풀이도 있었다.

function solution(name, yearning, photo) {
    const score = new Map();
    name.forEach((n,idx) => {
        score.set(n,yearning[idx]);
    });

    return photo.map(names => names.reduce((a,n) => a + (score.get(n)||0),0));
}

{ name: score } 쌍인 Map(=score)을 생성하고,

이후 풀이는 동일.

 

 

일반 객체를 사용했어도 됐을 것 같은데 왜 굳이 Map을 썼을까?

최적화가 되어 있어서 성능이 더 좋아서 사용한 건가?

그러기엔 삽입/제거가 자주 사용되는 경우에 최적화가 잘 되어 있어서 성능이 좋다고 했는데

 

음 .. 왜 사용했는지 의도는 잘 모르겠지만,

Map 사용법을 잘 몰랐는데, 이번 기회에 Map을 공부하게 되어서 좋았다.

다음에 Map을 이용해서 문제 풀이해봐야지.

 

 

 

반응형

'CS > 알고리즘' 카테고리의 다른 글

[230422] 기능개발  (0) 2023.04.22
[230422] 소수 찾기  (0) 2023.04.22
[230422] 소수 찾기  (0) 2023.04.21
[230421] 모의고사  (0) 2023.04.21
[230421] n^2 배열 자르기  (0) 2023.04.21