BOJ[9375] - 패션왕 신해빈 by JavaScript
패션왕 신해빈
문제
언어
- JavaScript
순서도
- Map 을 이용해서 의상의 종류마다 몇 개의 의상을 소유하고 있는지 파악
- 경우의 수 계산을 위해서 각 종류의 의상의 개수를 서로 곱하기 (이 때,
+ 1을 하고 곱하기) - 2 번의 계산을 통해 나온 경우의 수에
- 1해주고 출력
문제 풀이 step 1
- 우선 Map 을 이용해서 의상의 종류마다 몇 개의 의상이 있는지 파악합니다.
map.set(type, map.get(type) ? map.get(type) + 1 : 1);과 같이 삼항 연산자를 이용하면 쉽게 파악할 수 있습니다.
- 그리고 각 의상의 종류마다 센 의상의 개수에
+ 1을 하고 서로 곱해서 경우의 수를 계산합니다.+ 1을 하는 이유는 옷을 입지 않는 것도 하나의 의상으로 생각해서 입니다.
- 위의 계산을 통해 나온 경우의 수에
- 1을 해주고 출력해주면 정답이 됩니다.- 1을 하는 이유는 각 종류마다 옷을 입지 않는 경우, 즉 알몸인 경우를 제외시키기 위해서입니다.
- 추가 설명은 주석으로 작성하겠습니다.
소스 코드
const input = require("fs")
.readFileSync("/dev/stdin")
.toString()
.trim()
.split("\n");
const solution = (input) => {
let res = "";
let t = Number(input[0]);
let index = 1;
while (t-- > 0) {
const map = new Map();
// 입력 부분
const n = Number(input[index++]);
const arr = input.slice(index, index + n).map((v) => v.split(" "));
index += n;
for (let i = 0; i < arr.length; i++) {
const [_, type] = arr[i];
// 의상의 타입이 존재한다면 + 1, 의상의 타입이 존재하지 않는다면 1 로 초기화
map.set(type, map.get(type) ? map.get(type) + 1 : 1);
}
let cnt = 1;
for (let key of map.keys()) {
// 옷을 입지 않는 것도 하나의 의상으로 생각해서 + 1 을 한 후에 곱해줍니다.
cnt *= map.get(key) + 1;
}
// 알몸인 경우를 제외하고 출력해줍니다.
res += cnt - 1 + "\n";
}
return res;
};
console.log(solution(input));