๐Ÿงฉ Problem Solving/[๋ฐฑ์ค€]

[๋ฐฑ์ค€] 9375 ํŒจ์…˜์™• ์‹ ํ•ด๋นˆ (python ํŒŒ์ด์ฌ)

์ œ๋ด‰์•„ 2022. 6. 29. 21:37

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

 

9375๋ฒˆ: ํŒจ์…˜์™• ์‹ ํ•ด๋นˆ

์ฒซ ๋ฒˆ์งธ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” headgear์— ํ•ด๋‹นํ•˜๋Š” ์˜์ƒ์ด hat, turban์ด๋ฉฐ eyewear์— ํ•ด๋‹นํ•˜๋Š” ์˜์ƒ์ด sunglasses์ด๋ฏ€๋กœ   (hat), (turban), (sunglasses), (hat,sunglasses), (turban,sunglasses)๋กœ ์ด 5๊ฐ€์ง€ ์ด๋‹ค.

www.acmicpc.net


์•„์ด๋””์–ด

1. ์กฐํ•ฉ

  • ์ฒ˜์Œ์— ๋ฌธ์ œ๋ฅผ ๋ดค์„ ๋•Œ ๋ฐฉ๋ฒ•์„ ๋ชฐ๋ผ์„œ ์กฐํ•ฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•จ.
  • ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์™€ n์˜ ์ตœ๋Œ€๊ฐ€ ์ ์–ด ๊ฐ€๋Šฅํ•  ๊ฑฐ๋ผ ์ƒ๊ฐํ–ˆ์ง€๋งŒ ๋‹ค์‹œ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ์กฐํ•ฉ์ด๋ฉด ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ์—„์ฒญ ๋งŽ์•„์ง€๋‹ˆ 
  • ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋–ด๋‹ค.

2. ์ˆ˜ํ•™

  • ์–ด๋ฆด ๋•Œ ๋ฐฐ์› ๋˜ ๊ฒฝ์šฐ์˜ ์ˆ˜ ๋ฌธ์ œ๋ฅผ ์ƒ๊ฐํ•˜๋ฉด ๊ธˆ๋ฐฉ ํ’€ ์ˆ˜ ์žˆ๋‹ค.
  • ๋”•์…”๋„ˆ๋ฆฌ์™€ ๊ฐ™์ด ์“ฐ๋ฉด ๋งค์šฐ ๊ฐ„ํŽธํ•˜๊ฒŒ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ.

์ฝ”๋“œ ์„ค๋ช…

    cloth = {}
    result = 1
    n = int(input())
    for _ in range(n):
        name, type = sys.stdin.readline().rstrip().split()

        if not type in cloth:
            cloth[type] = 1
        else:
            cloth[type] += 1

    for i in cloth:
        result *= (cloth[i] + 1)

    print(result - 1)

์ฝ”๋“œ๋ฅผ ์งœ๋Š”๋ฐ ์–ด๋ ค์šด ๋ถ€๋ถ„์€ ์—†๊ณ  ์ˆ˜ํ•™์œผ๋กœ ์ ‘๊ทผํ•˜๋ฉด ๋งค์šฐ ๊ฐ„๋‹จํ•˜๋‹ค.

 

๋ฌธ์ œ์—์„œ ํ•ด๋นˆ์ด๋Š” ์ ์–ด๋„ 1๊ฐœ๋งŒ ๊ฑธ์น˜๋ฉด ๋ฐ–์— ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰ ์˜ท์„ ์ž…๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜์—์„œ ์ „๋ถ€๋‹ค ์•ˆ ์ž…๋Š” ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•ด์„œ ๊ณ„์‚ฐํ•˜๋ฉด ๋œ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด ์ƒ์˜ 2๊ฐœ, ๋ฐ”์ง€ 3๊ฐœ๊ฐ€ ์žˆ๋‹ค๋ฉด (2 + 1(์ƒ์˜๋ฅผ ์•ˆ ์ž…๋Š” ๊ฒฝ์šฐ)) * (3 + 1(๋ฐ”์ง€๋ฅผ ์•ˆ ์ž…๋Š” ๊ฒฝ์šฐ)) - 1

์œผ๋กœ ์ด ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 11์ด๋‹ค.

 

๋”•์…”๋„ˆ๋ฆฌ์— key๋ฅผ ์˜ท์˜ ์ข…๋ฅ˜๋กœ ์ •ํ•œ๋‹ค.

์˜ท์ด ์ด๋ฏธ ์žˆ๋Š” ์ข…๋ฅ˜๋ฉด key์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์— +1 ํ•ด์ฃผ๊ณ  ์•„๋‹ˆ๋ผ๋ฉด ์ƒˆ๋กญ๊ฒŒ key๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

์ตœ์ข… ๊ฐ’์— ์œ„์—์„œ ๋งํ–ˆ๋“ฏ์ด -1(๋ชจ๋“  ์˜ท์„ ์•ˆ ์ž…๋Š” ๊ฒฝ์šฐ)์„ ํ•ด์ฃผ๋ฉด ๋์ด๋‹ค.


์ „์ฒด ์ฝ”๋“œ

import sys

T = int(input())

for _ in range(T):
    cloth = {}
    result = 1
    n = int(input())
    for _ in range(n):
        name, type = sys.stdin.readline().rstrip().split()

        if not type in cloth:
            cloth[type] = 1
        else:
            cloth[type] += 1

    for i in cloth:
        result *= (cloth[i] + 1)

    print(result - 1)