반응형
문제
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 |