개발일지

프로그래머스 - 위장 (Javascript) 본문

개발일지/알고리즘

프로그래머스 - 위장 (Javascript)

Seobe95 2022. 8. 30. 23:00
 

프로그래머스

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

programmers.co.kr

프로그래머스 위장

접근방법

스파이는 다양한 부위에 해당하는 의상을 가지고 있는데, 부위는 중첩되더라도 의상은 중복되지 않는다. 따라서 의상의 부위가 중복된다면 부위라는 사물함에 의상이라는 내용물을 넣어야한다고 생각, 즉 해쉬를 이용하여 풀었다.

 

코드

function solution(clothes) {
  // Map을 이용하자!
  const spyClothes = new Map();
  clothes.forEach((item) => {
    // Map에 부위가 저장되어 있지 않다면
    if (!spyClothes.get(item[1])) {
      // 부위 이름(key)과 clothes라는 key와 옷 이름의 value가 담긴 배열을 추가
      spyClothes.set(item[1], {
        clothes: [item[0]],
      });
    } else {
      // 반대로 해당 부위가 저장되어있다면
      // 기존에 있던 옷들을 가져오고
      const clothe = spyClothes.get(item[1]).clothes;
      // 해당 부위에 새로운 옷들을 추가
      spyClothes.set(item[1], {
        clothes: [...clothe, item[0]],
      });
    }
  });
  // 옷가지수를 파악
  return [...spyClothes]
    .map((item) => {
      return item[1].clothes.length;
    })
    // 옷가지들의 가지 수 조합과 단벌의 경우를 모두 더해줌
    .reduce((a, b) => {
      return a * b + a + b;
    });
}