알고리즘/프로그래머스 - JS

[프로그래머스] level.1 추억 점수

개발자성장기 2023. 5. 16. 17:48
반응형

 

 

프로그래머스

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

programmers.co.kr


나의 풀이 

문자열 다루기 문제이다. 

 

생각의 과정

1. name 와 yearning로 객체를 만든뒤 

2. 이중 배열로 되어있는 photo를 reduce를 통해 result 배열을 만들자. 

 

 

 

 

// 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/176963?language=javascript

function solution(name, yearning, photo) {
  // 생각
  // name + yearning  객체로 만들어서 계속 활용

  const longingBox = {};

  // 1. 객체로 만들기
  // 두개 동시에 해야하기에 forEach나 reduce보단 for문으로 한 번에 두개를 넣자
  // 어차피 name과 yearing의 길이는 같으니까 물론 reduce로도 가능하다
  for (let i = 0; i < name.length; i++) {
    longingBox[name[i]] = yearning[i];
  }

  // reduce를 사용했을 때
  /*
    const longingBox = name.reduce((acc,cur,index) => {
        acc[cur] =  yearning[index]
        return acc
    },{})
        
    */

  // 2. longingBox를 활용해서 photo의 이중배열을 계산 및 처리후 result 배열 만들기

  // 내부 reduce는 배열안 배열의 각 그리움 점수의 합을 계산하여 return해준다.
  // 외부 reduce는 단순히 그 그리움의 점수를 배열로 만들어 return해줄뿐이다.

  return photo.reduce((photoAcc, photoCur) => {
    const longingScore = photoCur.reduce((acc, cur, index, arr) => {
      // 그리움 상자에 해당 인물이 있을 때
      if (longingBox[cur]) acc += longingBox[cur];
      return acc;
    }, 0);
    photoAcc.push(longingScore);
    return photoAcc;
  }, []);
}

 


다른 사람 풀이 

 

function solution(name, yearning, photo) {
    return photo.map((v)=> v.reduce((a, c)=> a += yearning[name.indexOf(c)] ?? 0, 0))
}

 

와 indexOf를 활용해서 풀었구나 싶었다. 

이러면 객체를 굳이 만들어줄 필요가 없다.  그냥 바로 이중배열을 처리하면서 하면 된다. 

그리고 photo의 length와 result의 length는 같을 수 밖에 없기 때문에 map을 사용해도 된다. 

 

반응형