๐Ÿงฉ Algorithm/SWEA

[SWEA] 4047. ์˜์ค€์ด์˜ ์นด๋“œ ์นด์šดํŒ… (Python/D3)

devCloud 2024. 11. 14. 01:44

[๋ฌธ์ œ ๋งํฌ] ๐Ÿ‘‡

 

SW Expert Academy

SW ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์—ญ๋Ÿ‰ ๊ฐ•ํ™”์— ๋„์›€์ด ๋˜๋Š” ๋‹ค์–‘ํ•œ ํ•™์Šต ์ปจํ…์ธ ๋ฅผ ํ™•์ธํ•˜์„ธ์š”!

swexpertacademy.com


ํ’€์ด ๋ฐฉ๋ฒ•

์นด๋“œ ์ž…๋ ฅ ๋ถ„ํ•  ๋ฐ ์ดˆ๊ธฐํ™”

S, D, H, C = [0]*13, [0]*13, [0]*13, [0]*13
  • S, D, H, C์˜ ๋„ค ๊ฐ€์ง€ ๋ฌด๋Šฌ์— ๋Œ€ํ•ด ๊ฐ๊ฐ 13์นธ์งœ๋ฆฌ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ ๋‹ค.
  • ๊ฐ ๋ฆฌ์ŠคํŠธ๋Š” 13๊ฐœ์˜ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์ง€๋ฉฐ, ๊ฐ ์ธ๋ฑ์Šค๋Š” ์นด๋“œ ๋ฒˆํ˜ธ(1~13)์— ๋Œ€์‘๋˜๋„๋ก ํ•œ๋‹ค.

์นด๋“œ ์ฝ๊ณ  ์นด์šดํŒ…

 for i in range(0, len(card), 3):
        shape = card[i]  # ์นด๋“œ ์ข…๋ฅ˜
        num = int(card[i + 1:i + 3])  # ์นด๋“œ ์ˆ˜
        ...
  • ์นด๋“œ ์ž…๋ ฅ ๋ฌธ์ž์—ด์„ 3๊ธ€์ž์”ฉ ์Šฌ๋ผ์ด์‹ฑํ•ด ์นด๋“œ์˜ ๋ฌด๋Šฌ์™€ ๋ฒˆํ˜ธ๋ฅผ ์ถ”์ถœํ•œ๋‹ค.
  • ๋ฌด๋Šฌ์— ๋”ฐ๋ผ ํ•ด๋‹น ๋ฆฌ์ŠคํŠธ์˜ ์นด๋“œ ๋ฒˆํ˜ธ ์œ„์น˜์— 1์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

์ค‘๋ณต ํ™•์ธ

  • ์นด๋“œ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ™•์ธํ•ด 2 ์ด์ƒ์˜ ๊ฐ’์ด ์žˆ๋Š” ๊ฒฝ์šฐ, ํ•ด๋‹น ์นด๋“œ๊ฐ€ ์ค‘๋ณต์ž„์„ ์˜๋ฏธํ•˜๋ฏ€๋กœ ERROR๋ฅผ ์ถœ๋ ฅํ•˜๋„๋ก ์„ค์ •ํ•œ๋‹ค.

๋‚จ์€ ์นด๋“œ ๊ฐœ์ˆ˜ ๊ณ„์‚ฐ

result = [S.count(0), D.count(0), H.count(0), C.count(0)]
  • ์ค‘๋ณต์ด ์—†๋‹ค๋ฉด 0 ๊ฐ’์ด ๋‚จ์€ ์นด๋“œ ์ˆ˜์ด๋ฏ€๋กœ, ๊ฐ ๋ฌด๋Šฌ๋ณ„๋กœ ๋‚จ์€ ์นด๋“œ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ์ถœ๋ ฅํ•œ๋‹ค.

Solution

T = int(input())  # ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ˆ˜
for test_case in range(1, T + 1):
    card = input().strip()
    S, D, H, C = [0]*13, [0]*13, [0]*13, [0]*13
    for i in range(0, len(card), 3):
        shape = card[i]  # ์นด๋“œ ์ข…๋ฅ˜
        num = int(card[i + 1:i + 3])  # ์นด๋“œ ์ˆ˜
        if shape == 'S': 
            S[num - 1] += 1
        elif shape == 'D':
            D[num - 1] += 1
        elif shape == 'H':
            H[num - 1] += 1
        elif shape == 'C':
            C[num - 1] += 1

    result = [S, D, H, C]
    error = ""
    for i in result:
        for j in i:
            if j > 1:
                error = "ERROR"
                break

    result = [S.count(0), D.count(0), H.count(0), C.count(0)]
    if error == "":
        print(f"#{test_case}", *result)
    else:
        print(f"#{test_case} {error}")

 

 

๊ฐœ์„  ํฌ์ธํŠธ

  • ์ค‘๋ณต ์นด๋“œ ๊ฒ€์ถœ ๋ฐฉ์‹
    • if j > 1๋กœ ํ•œ ๋ฒˆ์ด๋ผ๋„ ์ค‘๋ณต์ด ๋ฐœ๊ฒฌ๋˜๋ฉด ๋ฐ”๋กœ "ERROR"๋ฅผ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฃจํ”„๋ฅผ ํƒˆ์ถœํ•˜๋ฉด ๋ถˆํ•„์š”ํ•œ ๊ณ„์‚ฐ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ์นด๋“œ ์ค‘๋ณต ํ™•์ธ ๋ฐฉ์‹ ๋ณ€๊ฒฝ
    • ๊ฐœ์ˆ˜๋ฅผ ์ง์ ‘ ์„ธ๋Š” ๋Œ€์‹ , ์ง‘ํ•ฉ์„ ์‚ฌ์šฉํ•ด ์ค‘๋ณต์„ ์‰ฝ๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ค‘๋ณต์ด ์—†์œผ๋ฉด ์ง‘ํ•ฉ์— ์ถ”๊ฐ€ํ•˜๊ณ , ์ค‘๋ณต์ด ๋ฐœ์ƒํ•˜๋ฉด ์ฆ‰์‹œ "ERROR"๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • ์นด๋“œ ๊ฐœ์ˆ˜ ์นด์šดํŠธ ๋ฐฉ์‹ ๋‹จ์ˆœํ™”
    • ๊ฐ ์นด๋“œ์— ๋Œ€ํ•ด ์นด์šดํŠธ๋งŒ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด ๋˜๋ฏ€๋กœ ๋ฐฐ์—ด ๋Œ€์‹  set๊ณผ dict๋ฅผ ์‚ฌ์šฉํ•ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฐœ์„ ๋œ ์ฝ”๋“œ

T = int(input())  # ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ˆ˜
for test_case in range(1, T + 1):
    card = input().strip()
    card_set = set()
    card_count = {'S': 13, 'D': 13, 'H': 13, 'C': 13}
    error = False

    for i in range(0, len(card), 3):
        shape = card[i]
        num = int(card[i + 1:i + 3])
        card_key = (shape, num)
        
        if card_key in card_set:
            error = True
            break
        card_set.add(card_key)
        card_count[shape] -= 1

    if error:
        print(f"#{test_case} ERROR")
    else:
        print(f"#{test_case}", card_count['S'], card_count['D'], card_count['H'], card_count['C'])