πŸ”’Algorithm

λ°±μ€€[JS] > 9375번 νŒ¨μ…˜μ™• μ‹ ν•΄λΉˆ

devWarrior 2025. 3. 1. 14:51

🧩문제링크

https://www.acmicpc.net/problem/9375

πŸ”₯풀이

μ²˜μŒμ— 쑰합을 μƒκ°ν•΄μ„œ μ ‘κ·Όν–ˆλŠ”λ° μƒκ°ν•΄λ³΄λ‹ˆ 그럴 ν•„μš”κ°€ μ—†μ—ˆλ‹€. λ§Œμ•½ μƒμ˜κ°€ 5개, ν•˜μ˜κ°€ 5개 μžˆλ‹€λ©΄ μƒμ˜λ₯Ό 선택할 수 μžˆλŠ”λ°©λ²•μ€ 6κ°€μ§€ ( μž…μ§€ μ•ŠλŠ” 경우 1κ°€μ§€ + μƒμ˜λ₯Ό μž…λŠ” 경우 5κ°€μ§€ ) ,ν•˜μ˜λ₯Ό μž…λŠ” 방법은 6κ°€μ§€ ( μž…μ§€μ•ŠλŠ” 경우 + ν•˜μ˜λ₯Ό μž…λŠ” 경우 5κ°€μ§€ ) 이닀. λ”°λΌμ„œ 6*6 -1 λ₯Ό κ³„μ‚°ν•˜λ©΄ μ˜·μ„ μž…μ§€μ•ŠλŠ” 경우λ₯Ό μ œμ™Έν•œ μ˜·μ„ μž…λŠ” κ²½μš°κ°€ λ‚˜μ˜¨λ‹€. μ΄λŸ°μ‹μœΌλ‘œ 계산을 ν•˜λ©΄ μ‰½κ²Œ ꡬ할 수 μžˆλ‹€.

let fs = require("fs");
let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
let answer = "";

for (let i = 1; i < input.length; ) {
    let clothCnt = +input[i];

    let obj = {};

    for (let j = 1; j <= clothCnt; ++j) {
        let [cloth, type] = input[i + j].split(" ");
        if (obj[type] === undefined) {
            obj[type] = 1;
        } else {
            ++obj[type];
        }
    }

    let total = 1;
    Object.values(obj).forEach((v) => {
        total = total * (v + 1);
    });

    total -= 1;
    answer += `${total}\n`;

    i += clothCnt + 1;
}
console.log(answer.toString());