[BOJ]2621. 카드게임

Jungmin Lee·2021년 3월 8일
1

APS

목록 보기
4/25
post-thumbnail

문제

BOJ 2621 문제 바로가기
문제의 저작권은 백준온라인저지에 있습니다.

나의 코드

import sys
input = sys.stdin.readline

def color_same():       # 같은색인지 판별
    for card in cards:
        if len(cards.get(card)) == 5:
            return True
        elif len(cards.get(card)) == 0:
            continue
        else:
            return False

def num_growup():       # 숫자가 연속인지 판별
    tmp_list=[]
    count=[0]*10
    for card in cards:
        tmp_list+=cards.get(card)
        for c in cards.get(card):
            if count[c] ==1:
                return False,0
            else:
                count[c] += 1
    tmp_list.sort()
    if tmp_list[-1]-tmp_list[0]==4:
        return True, tmp_list[-1]
    else:
        return False, 0

def same_num(howmany,fromfront):         # 원하는 개수를 가진 인덱스번호 찾기 없으면 0
    count=[0]*10
    for card in cards:
        for c in cards.get(card):
            count[c] += 1
    if fromfront:
        for i in range(1,10):
            if count[i] == howmany:
                return i
    else:
        for i in range(9,0,-1):
            if count[i] == howmany:
                return i
    return 0


def find_score():
    # 규칙1
    if color_same():
        is_grow, max_num=num_growup()
        if is_grow:
            print(max_num+900)
            return

    # 규칙2
    num_idx= same_num(4,True)
    if num_idx != 0:
        print(num_idx+800)
        return

    # 규칙3
    num_idx=same_num(3,True)
    if num_idx != 0:
        answer = num_idx*10
        num_idx2=same_num(2,True)
        if num_idx2 != 0:
            answer += num_idx2+700
            print(answer)
            return
        elif not color_same():  # 규칙 6
            print(num_idx+400)
            return

    # 규칙4
    if color_same():
        tmp_list=[]
        for card in cards:
            tmp_list += cards.get(card)
        tmp_list.sort()
        print(tmp_list[-1]+600)
        return

    # 규칙5
    is_true, max_num=num_growup()
    if is_true:
        print(500+max_num)
        return

    # 규칙7
    num_idx=same_num(2,True)
    if num_idx !=0:
        answer = num_idx
        num_idx2=same_num(2,False)
        if num_idx2 != num_idx:
            answer += num_idx2*10 + 300
            print(answer)
            return
        else:           # 규칙8
            print(answer+200)
            return

    # 규칙9
    tmp_list = []
    for card in cards:
        tmp_list += cards.get(card)
    tmp_list.sort()
    print(tmp_list[-1]+100)
    return

# 입력부분
cards={}

for i in range(5):
    color, number = input().split()
    if cards.get(color) is None:
        cards[color] = [int(number)]
    else:
        cards[color].append(int(number))

find_score()

어려운건 없지만 조건이 다양하므로 예시로 주어진 tc다 넣어보면 통과가 쉽게가능

profile
금융 도메인과 개발 지식을 함께 쌓아가는 주니어 개발자입니다😊

0개의 댓글