[백준] 2621. 카드게임

원숭2·2022년 3월 7일
0

백준

목록 보기
54/54

문제

풀이

  1. 문제의 조건이 굉장히 많기 때문에 색깔 별, 숫자 별로 구별해서 생각함.
  2. Counter 함수를 통해 색깔의 동일 여부를 파악함.
  3. 숫자의 동일 여부 또한 Counter 함수를 사용한 후, items 함수를 사용하고 items가 return한 값을 sort함수와 lambda식을 통해 정렬함.
  4. 조건에 맞게 구분해줌.

코드

from collections import Counter

def solution() :
    colors = []
    numbers = []
    
    for _ in range(5) :
        color, number = input().split()
        colors.append(color)
        numbers.append(int(number))
    
    color_check = sorted(list(Counter(colors).values()))
    number_check = sorted(list(Counter(numbers).items()), key = lambda x : (-x[1], -x[0]))
    
    if color_check == [5] :
        if sorted(numbers, reverse = True) == sorted(numbers)[::-1] and (sorted(numbers)[0] + sorted(numbers)[-1]) / 2 == sorted(numbers)[2] :
            return max(numbers) + 900
        else :
            return max(numbers) + 600
    else :
        if number_check[0][1] == 4 :
            return number_check[0][0] + 800
        
        elif number_check[0][1] == 3 :
            if number_check[1][1] == 2 :
                return (number_check[0][0] * 10) + number_check[1][0] + 700
            else :
                return number_check[0][0] + 400
            
        elif number_check[0][1] == 2 :
            if number_check[1][1] == 2 :
                return (number_check[0][0] * 10) + number_check[1][0] + 300
            else :
                return number_check[0][0] + 200
            
        elif sorted(numbers, reverse = True) == sorted(numbers)[::-1] and (sorted(numbers)[0] + sorted(numbers)[-1]) / 2 == sorted(numbers)[2] :
            return max(numbers) + 500
        
        else :
            return max(numbers) + 100
            
print(solution())

0개의 댓글