본문 바로가기

코딩 테스트 풀이/백준

[C3] 9375 - 패션왕 신해빈

문제

 

여러 종류의 의상을 매치 시키는 문제이다

약 8개월 전에 풀었던 프로그래머스의 '의상' 문제와 동일한 문제.

https://kinggh.tistory.com/98

 

240320 의상

문제 설명 코니는 매일 다른 옷을 조합하여 입는것을 좋아합니다. 예를 들어 코니가 가진 옷이 아래와 같고, 오늘 코니가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추

kinggh.tistory.com

 

당시에는 그냥 풀이를 보고 이해 없이 풀었는데, 이 문제를 다시 풀며 완벽히 이해할 수 있었다.

풀이

입력이 까다로워서, 입력을 제외하고 첫번째 TC만 보자

headgear에 hat, turban이 있고

eyeware에 sunglasses가 있다.

각 종류별 2개, 1개의 의상이 있기 때문에

각 의상들을 매치하는 경우는 2x1 = 2개일 것이다

하지만 이는 '모든 종류의 의상을 다 입는 경우'에만 해당하는 경우이다.

문제에서는 한번 옷을 입을 때, 모든 종류의 의상을 다 입어야 한다는 말이 없기 때문에

하루는 모자만, 하루는 터번과 선글라스, 하루는 선글라스만 등등

하루에 한가지 종류의 의상만 착용해도 된다는 말이다

일차 hadgear eyeware
1 x x
2 x sunglasses
3 hat x
4 hat sunglasses
5 turban x
6 turban sunglasses

 

한 종류의 의상 중 아무것도 착용하지 않는 경우를 x라고 생각한다면

headgear = [x, hat, turban]

eyeware = [x,sunglasse]

라고 볼 수 있다.

따라서, (한 종류의 의상 개수 + 1) 한 값들을 모두 곱해준 뒤, 

아무것도 입지 않는 경우 1가지만 빼주면 된다.

코드

 

const readline = require("readline");
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

const input = [];

rl.on("line", (line) => {
  input.push(line);
}).on("close", () => {
  const n = input.shift();
  const ans = [];
  for (let i = 0; i < input.length; i++) {
    if (!isNaN(input[i] / 1)) {
      const num = input[i] / 1;
      const clothes = input.slice(i + 1, i + num + 1);
      const obj = {};
      clothes.forEach((el) => {
        const [kind, type] = el.split(" ");
        if (!obj[type]) obj[type] = [];
        obj[type].push(kind);
      });
      const kinds = Object.values(obj);
      ans.push(kinds.reduce((acc, cur) => acc * (cur.length + 1), 1) - 1);
    }
  }
  console.log(ans.join("\n"));
  process.exit(0);
});

 

첫번째 입력은 빼고, 두번째 입력부터 해당 입력이 숫자라면, 그 숫자만큼 input에서 잘라내 의상의 종류를 배열로 만든다

이후 객체에 각 종류별 의상을 담고, 의상들의 개수에 1을 더해 모두 곱한 뒤, 최종 결과에서 -1을 빼주면 된다

'코딩 테스트 풀이 > 백준' 카테고리의 다른 글

[C4] 11725 - 트리의 부모찾기  (0) 2024.12.06
[C3] 5430 - AC  (0) 2024.12.04
[C4] 1149 - RGB거리  (3) 2024.11.28
[C3] 1260 - DFS와 BFS  (0) 2024.11.27
[C3] 14940 - 쉬운 최단거리  (1) 2024.11.18