오래만의 코딩테스트
그리워하는 사람의 이름을 담은 문자열 배열 name, 각 사람별 그리움 점수를 담은 정수 배열 yearning, 각 사진에 찍힌 인물의 이름을 담은 이차원 문자열 배열 photo가 매개변수로 주어질 때, 사진들의 추억 점수를 photo에 주어진 순서대로 배열에 담아 return하는 solution 함수를 완성해주세요.
예시const name = ['may', 'kein', 'kain', 'radi']; const yearning = [5, 10, 1, 3]; const photo = [ ['may', 'kein', 'kain', 'radi'], ['may', 'kein', 'brin', 'deny'], ['kon', 'kain', 'may', 'coni'], ]; solution(name, yearning, photo) == [19,15,6];
문제풀이 흐름
- photo에 담긴 이차원 배열을 이중 for문 또는 이중 map을 통해 세부 값에 접근하다.
- 세부값이 name에 들어있는 값과 같을때 그 값의 index값을 통해 점수를 구한다.
- 각 이차원배열을 한번씩 돌때마다 총합을 구해 정답 배열에 push 한다.
풀이코드
function solution(name, yearning, photo) { let answer = []; photo.map((detail, idx) => { let sum = 0; detail.forEach((content) => { if (name.includes(content)) { sum += yearning[name.indexOf(content)]; } }); answer.push(sum); }); return answer; }
다른 사람풀이
- 풀이 과정에서 2번의 풀이과정을 나는 name 배열 안에 content를 가질때 그 인덱스의 점수를 더하는 방식으로 해결 했다
- 다른 사람의 풀이 과정은
Map 자료구조를 통해 해결을 했다 const score = new Map() name.forEach((n,idx)=>{score.set(n,yearning[idx])}) photo.map(detail => detail.reduce((a,name)=>a + (score.get(name)||0),0))
맵에 이름당 점수를 가지는 객체를 만들고 photo에서 배열마다 그이름이 들어가있는 점수를 꺼내어 점수를 reduce를 통해 계산을 하였다.
오랜만에 코딩테스트를 다시 푸니 재미가 있었고, 잘 쓰지않고 있던 함수를 다시금 생각해보는 시간이 되었다.
이제 시간이 된다면 매일 한문제씩 풀어가도록 해보겠다.