추억 점수 level01

태권·2023년 4월 3일
0

알고리즘

목록 보기
8/8

오래만의 코딩테스트

그리워하는 사람의 이름을 담은 문자열 배열 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];

문제풀이 흐름

  1. photo에 담긴 이차원 배열을 이중 for문 또는 이중 map을 통해 세부 값에 접근하다.
  2. 세부값이 name에 들어있는 값과 같을때 그 값의 index값을 통해 점수를 구한다.
  3. 각 이차원배열을 한번씩 돌때마다 총합을 구해 정답 배열에 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를 통해 계산을 하였다.
오랜만에 코딩테스트를 다시 푸니 재미가 있었고, 잘 쓰지않고 있던 함수를 다시금 생각해보는 시간이 되었다.
이제 시간이 된다면 매일 한문제씩 풀어가도록 해보겠다.

profile
2022.08 개발자 시작

0개의 댓글