본문 바로가기
알고리즘

[알고리즘/백준] 2621번 카드게임 Python 파이썬

by 배애앰이 좋아 2023. 2. 26.
반응형

 

이번 문제는 로직은 간단하지만 조건이 복잡해서 오래 걸린 문제이다.

 

 

사실 보자마자 건너뛰고 싶었으나.... 순차적으로 풀어야 의미가 있기에 눈물 머금고 했다. 해당 문제는 복잡하게 짜면 코드 줄이 엄청나게 늘어날 가능성이 있기 때문에 최대한 딕셔너리, 리스트, 함수, 인덱스 등 활용해서 풀었다. 숫자를 표시해주는 딕셔너리 / 각 n 번째 숫자에 카드의 갯수를 확인해주는 리스트 하나, 그냥 숫자 담긴 리스트 하나를 만들어서 풀어주었다.

 

다음과 같은 코드를 통해 통과하였습니다.

 

import sys
input = sys.stdin.readline

cards_num = [ 0 for i in range(10)]
cards_real_num = [ 0 for i in range(5)]
cards_color = {'R':0 , 'B':0, 'Y':0, 'G':0}

for i in range(5):
    card = list(map(str, input().split()))
    cards_color[card[0]] += 1
    cards_num[int(card[1])] += 1
    cards_real_num[i] = int(card[1])

def check_line_card(len_num):
    check = 0
    for i in range(10):
        if cards_num[i] != 0:
            check += 1
        else:
            check = 0
        if check == len_num:
            return i
    return 0
    

answer = 0
# 1
if 5 in cards_color.values() and check_line_card(5):
    answer = check_line_card(5) + 900
# 2
elif 4 in cards_num:
    answer = cards_num.index(4)+800
# 3
elif 3 in cards_num and 2 in cards_num:
    answer = (cards_num.index(3)*10)+cards_num.index(2)+700
# 4
elif 5 in cards_color.values():
    answer = max(cards_real_num)+600
# 5
elif check_line_card(5):
    answer = check_line_card(5) + 500
# 6
elif 3 in cards_num:
    answer = cards_num.index(3)+400
# 7 # 8
elif 2 in cards_num:
    num1 = cards_num.index(2)
    num2 = 0
    if 2 in cards_num[0:num1-1]:
        num2 = cards_num.index(2, 0, num1-1)
    elif 2 in cards_num[num1+1:10]:
        num2 = cards_num.index(2, num1+1, 10)
    else:
        answer = cards_num.index(2)+200
    if num2 != 0:
        answer = (max(num1, num2)*10) + min(num1, num2)+300
# 9
else:
    answer = max(cards_real_num)+100
        
print(answer)

 

 

나름대로 코드 수 많이 줄었다고 생각한다... 후 풀면서 에러가 몇 번 났는데 이를 방지하기 위해서는 문제에 각 조건 별로 확인하라고 적어주는 예제들을 일일이 테스트해보는 것이 좋다. 그리고 두 가지 이상의 규칙을 적용할 수 있는 경우에는 가장 높은 점수를 출력해줘야 하기 때문에 1번 조건부터 순차적으로 만들었다면 if elif 를 써도 상관없다. 그게 아니라면 정답 중 뭐가 더 큰지 확인해줘야하는 사태가 벌어진다. 

 

반응형

댓글