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

[COS PRO 2급 #4-3] 획득 점수 구하기. 도박은 안돼요.

by 포푸리 (POPOOLY) 2023. 1. 27.
반응형

문제설명

 A와 B가 카드 게임을 할 때, 누가 더 많은 점수를 획득했는지, 또 획득한 점수는 몇 점인지 알아보려고 합니다. 게임 규칙은 다음과 같습니다.
* 알파벳 a, b, c, d, e가 적힌 카드뭉치가 있습니다.
* A와 B가 서로 번갈아 가면서 n장씩 카드를 뽑습니다.
* 소유한 카드 점수를 합산합니다. 알파벳 카드 한 장당 a = 1점, b = 2점, c = 3점, d = 4점, e = 5점으로 점수를 계산합니다.
* 점수가 높은 사람이 승리합니다.

게임에서 이긴 사람과 획득 점수를 구하기 위해 다음과 같이 프로그램 구조를 작성했습니다.

```
1. A와 B가 번갈아가며 가져간 카드를 각각 리스트에 넣습니다.
2. A와 B가 각각 획득한 점수를 구합니다.
3. 획득한 점수가 큰 사람과 획득한 점수를 순서대로 리스트에 담아 return 합니다.
```

뽑아야 하는 카드 개수 n과 카드를 나타내는 문자열 bundle이 매개변수로 주어질 때, 이긴 사람과 점수를 return 하도록 solution 함수를 작성하려 합니다. 위 구조를 참고하여 코드가 올바르게 동작할 수 있도록 빈칸에 주어진 func_a, func_b, func_c 함수와 매개변수를 알맞게 채워주세요.

매개변수 설명

뽑아야 하는 카드 개수 n과 카드를 나타내는 문자열 bundle이 solution함수의 매개변수로 주어집니다.

* n은 1 이상 25 이하인 자연수입니다.
* bundle은 모두 알파벳 소문자입니다.
* bundle의 길이는 2이상 2*n이하입니다.

return 값 설명

이긴 사람과 획득한 점수를 return합니다.
A가 이겼을 경우에는 1, B가 이겼을 경우에는 2, 무승부일 경우에는 0을 return 해주세요.

예시

| n | bundle | return |
|---|---|---|
| 4 | "cacdbdedccbb" | [0, 13] |

예시설명

A는 c, c, b, e 카드를 뽑았고 B는 a, d, d, d 카드를 뽑았습니다. A가 획득한 점수는 13점이고 B가 획득한 점수는 13점입니다. 둘다 13점을 획득하여 게임은 무승부로 끝납니다.

문제 코드

def func_a(bundle, start):
    return bundle[start::2]

def func_b(score1, score2):
    if score1 > score2:
        return [1, score1]
    elif score2 > score1:
        return [2, score2]
    else:
        return [0, score1]

def func_c(bundle):
    answer = 0
    score_per_cards = {
        'a': 1,
        'b': 2,
        'c': 3,
        'd': 4,
        'e': 5
    }
    for card in bundle:
        answer += score_per_cards[card]
    return answer
        
def solution(n, bundle):
    a_cards = func_a(@@@, @@@)[:n]
    b_cards = func_a(@@@, @@@)[:n]
    a_score = func_c(@@@)
    b_score = func_c(@@@)
    return func_b(@@@, @@@)

풀이

# bundle에서 두 칸 간격으로 카드 뽑기
def func_a(bundle, start):
    return bundle[start::2]

# 이긴 사람과 획득한 점수 return
def func_b(score1, score2):
    if score1 > score2:
        return [1, score1]
    elif score2 > score1:
        return [2, score2]
    else:
        return [0, score1]

# 보유한 카드의 점수 구하기
def func_c(bundle):
    answer = 0
    score_per_cards = {
        'a': 1,
        'b': 2,
        'c': 3,
        'd': 4,
        'e': 5
    }
    for card in bundle:
        answer += score_per_cards[card]
    return answer
        
def solution(n, bundle):
    a_cards = func_a(bundle, 0)[:n]
    b_cards = func_a(bundle, 1)[:n]
    a_score = func_c(a_cards)
    b_score = func_c(b_cards)
    return func_b(a_score, b_score)

댓글