본문 바로가기
Python/알고리즘

[COS PRO 2급 #6-4] 카드 뽑기 게임

by 포푸리 (POPOOLY) 2023. 2. 9.
반응형

문제설명

카드를 3장 뽑아 점수를 내는 게임을 하려고 합니다. 각 카드는 색이 칠해져 있고, 숫자가 적혀 있습니다.

획득한 점수를 계산하는 규칙은 다음과 같습니다.

```
1. 카드 3장의 색이 모두 같다면 획득한 점수는 적힌 숫자의 총합에 3을 곱한 값입니다.
2. 카드 2장의 색이 같고, 1장의 색이 다르다면 획득한 점수는 적힌 숫자의 총합에 2를 곱한 값입니다.
3. 카드 3장의 색이 모두 다르다면 획득한 점수는 적힌 숫자의 총합입니다.
```

뽑은 카드의 색과 숫자를 문자열로 담은 2차원 리스트 cards가 매개변수로 주어질 때, 획득한 총 점수를 return 하도록 solution 함수를 작성해주세요.

매개변수 설명

뽑은 카드의 색과 숫자를 문자열로 담은 2차원 리스트 cards가 solution 함수의 매개변수로 주어집니다.
* cards는 3x2 크기인 2차원 리스트입니다.
* cards의 각 원소는 [색, 숫자] 입니다.
    * 카드의 색은 ["red", "black", "blue"] 중 하나입니다.
    * 카드에 적힌 숫자는 1 이상 9 이하인 자연수입니다.

return 값 설명

획득한 총 점수를 return 합니다.

예시

| cards                                       | return |
|------------------------------------------------|--------|
| [["blue", "2"], ["red", "5"], ["black", "3"]]  | 10  |
| [["blue", "2"], ["blue", "5"], ["black", "3"]] | 20  |

예시설명

예제 #1
모든 카드 색이 모두 다르기 때문에 획득한 점수는 적힌 숫자의 총합인 10 입니다.

예제 #2
두 카드 색이 같고, 1장의 색이 다릅니다. 따라서’ 획득한 점수는 적힌 숫자의 총합에 2를 곱한 20 입니다.

문제 코드

def solution(cards):
    #여기에 코드를 작성해주세요.
    answer = 0
    return answer

풀이 1

def solution(cards):
	answer = 0
    # 카드 3장의 색이 모두 같으면 숫자 총합의 3배
	if cards[0][0] == cards[1][0] and cards[1][0] == cards[2][0]:
		answer = (int(cards[0][1]) + int(cards[1][1]) + int(cards[2][1])) * 3
    # 카드 2장의 색이 같으면 숫자 총합의 2배
	elif cards[0][0] == cards[1][0] or cards[1][0] == cards[2][0] or cards[2][0] == cards[0][0]:
		answer = (int(cards[0][1]) + int(cards[1][1]) + int(cards[2][1])) * 2
    # 색이 모두 다르면 숫자 총합
	else:
		answer = int(cards[0][1]) + int(cards[1][1]) + int(cards[2][1])
	return answer

풀이 2

def solution(cards):
    answer = 0
    count = [0 for _ in range(3)]
    # black, blue, red 카드 개수 구하기
    for card in cards:
        if card[0] == 'black':
            count[0] += 1
        elif card[0] == 'blue':
            count[1] += 1
        elif card[0] == 'red':
            count[2] += 1
        answer += int(card[1])
    # 카드 세장의 색이 같으면 총합의 3배
    if count[0] == 3 or count[1] == 3 or count[2] == 3:
        answer *= 3
    # 카드 두장의 색이 같으면 총합의 2배
    elif count[0] == 2 or count[1] == 2 or count[2] == 2:
        answer *= 2
    return answer

댓글