백준 9375 패션왕 신혜빈

jathazp·2022년 2월 4일
0

algorithm

목록 보기
57/57
//const [n...arr] = require('fs').readFileSync('입력.txt').toString().trim().split('\r\n');
let input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');

let idx = 0;
let tc = +input[idx++];
for (let i = 0; i < tc; i++) {
    let n = +input[idx++];
    let ans = 1;
    let map = new Map();

    for (let j = 0; j < n; j++) {
        let [name, category] = input[idx++].split(' ');

        if (map.get(category) != undefined) map.get(category).push(name);
        else map.set(category, [name]);
    }

    for (let category of map.keys()) {
        ans *= (map.get(category).length + 1);
    }
    console.log(ans - 1);
}

카테고리 별로 map에 담아주었다.
이어서 각 카테고리별 길이를 통해 전체 경우의 수를 구해주었다.
여기서 경우의 수는 소인수분해 후 약수 개수를 구하는 방법을 생각하고 풀었다.

ex)
12 = 2^2 * 3 => 약수 개수는 (2+1)x(1+1) = 6개

다만 이 문제에서는 아무것도 고르지 않는 경우는 없으므로
최종 결과에서 1을 빼주었다.

0개의 댓글