본문 바로가기
알고리즘/백준온라인저지 (Python)

[백준온라인저지] 2621 - 카드게임

by 미래문 2021. 8. 24.
반응형


 

 

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

 

2621번: 카드게임

근우는 오늘 재미있는 카드 게임을 배우고 있다. 카드는 빨간색, 파란색, 노란색, 녹색의 네 가지 색이 있고, 색깔별로 1부터 9까지 숫자가 쓰여진 카드가 9장씩 있다. 카드는 모두 36(=4x9)장이다.

www.acmicpc.net

 

import sys

result = 0

cards = [list(sys.stdin.readline().strip()) for _ in range(5)]

colors = [x[0] for x in cards]
numbers = [int(x[2]) for x in cards]

hash_color = {}
hash_number = {}

for c in colors:
    if c in hash_color:
        hash_color[c] += 1
    else:
        hash_color[c] = 1

for n in numbers:
    if n in hash_number:
        hash_number[n] += 1
    else:
        hash_number[n] = 1

numbers.sort()

color = []
number = []

def color_match(n):
    global color

    for k, v in hash_color.items():
        if v == n:
            color.append(k)
            return True
    return False

def number_match(n):
    global number

    result = False

    for k, v in hash_number.items():
        if v == n:
            number.append(k)
            result = True

    return result

def is_seq():
    global numbers

    prev = None

    for k in numbers:
        if prev != None:
            if (prev + 1) != k:
                return False
        prev = int(k)
    return True

if color_match(5) and is_seq():
    result += (900 + numbers[4])
elif number_match(4):
    result += (800 + number[0])
elif number_match(3) and number_match(2):
    result += (700 + (10 * number[0]) + number[1])
elif color_match(5):
    result += (600 + numbers[4])
elif is_seq():
    result += (500 + numbers[4])
elif number_match(3):
    result += (400 + number[0])
elif number_match(2) and (len(number) == 2):
    number.sort()
    result += (300 + number[0] + (number[1] * 10))
elif number_match(2):
    result += (200 + number[0])
else:
    result += (100 + numbers[4])
print(result)
반응형

댓글