문제 링크
https://www.acmicpc.net/problem/9375
풀이
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
const iterator = input[Symbol.iterator]();
let T = +iterator.next().value;
while (T--) {
const wear = {};
let n = +iterator.next().value;
while (n--) {
const [ _, kind ] = iterator.next().value.split(/\s+/);
wear[kind] = (wear[kind] ?? 0) + 1;
}
console.log([...Object.values(wear)].reduce((acc, v) => acc*(v+1), 1) - 1);
}
각 테스트케이스 별로 등장하는 의상의 종류와, 해당 종류에 몇 개의 의상이 존재하는지를 wear에 저장한다.
예제의 첫 번째 테스트케이스에서
hat headgear
sunglasses eyewear
turban headgear
이 부분은 { headgear: 2, eyewear: 1 }로 저장한다.
headgear를 입는 경우 2가지, 입지 않는 경우 1가지가 있고,
별개로 eyewear를 입는 경우 1가지, 입지 않는 경우 1가지가 있다.
따라서 입을 수 있는 옷의 조합은 (2 + 1) * (1 + 1) = 6가지이다.
그러나, 알몸이 아닌 상태여야 하므로 반드시 1개 이상의 옷을 입어야 한다.
따라서 모든 옷을 입지 않은 경우 1가지를 빼면 최종적으로 5가지가 된다.
'연습장 > 백준(BOJ) 문제풀이' 카테고리의 다른 글
[백준 11286] 절댓값 힙 with Python (0) | 2021.09.06 |
---|---|
[백준 1389] 케빈 베이컨의 6단계 법칙 with Node.js (0) | 2021.09.03 |
[백준 5525] IOIOI with Python (0) | 2021.08.28 |
[백준 17626] Four Squares with Node.js (1) | 2021.08.25 |
[백준 11052] 카드 구매하기 with Python (0) | 2021.08.25 |