본문 바로가기
DEV/백준 알고리즘

백준 알고리즘 2480번(파이썬)

by 올커 2022. 9. 12.

 

백준 알고리즘 2480번

Q. 백준 2480. 주사위 세개

주사위 세개를 던져서 아래 규칙에 따라 상금을 받는 게임이 있다. 같은 눈이 3개 나올 경우, 상금은 10,000원 + (같은 눈) × 1,000원, 같은 눈이 2개 나올 경우, 상금은 1,000원 + (같은 눈) × 100원, 그리고 모두 다른 눈이 나올 경우에는 (가장 큰 눈) × 100원을 상금으로 주기로 했다. 이 때, 주사위 게임 결과에 따라 상금을 계산하는 프로그램을 작성한다.

조건 상금
같은 눈이 3개 10,000원 + (같은 눈) × 1,000원
같은 눈이 2개 1,000원 + (같은 눈) × 100원
모두 다른 눈 (가장 큰 눈) × 100원

(1) 입력 : 첫째 줄에 3개의 주사위 눈의 값을 공백을 사이에 두고 각각 입력받도록 한다.
(2) 출력 : 주사위 게임의 총 상금을 계산하여 둘째 줄에 출력한다.


A. 풀이

# Q 백준 2480, 주사위 세개
dice = list(map(int, input().split()))
price = 0


if dice[0] == dice[1]:
    if dice[0] == dice[2]:
        price = 10000 + dice[0]*1000
    else:
        price = 1000 + dice[0] * 100
elif dice[0] == dice[2]:
    price = 1000 + dice[0] * 100
elif dice[1] == dice[2]:
    price = 1000 + dice[1] * 100
else:
    price = max(dice) * 100

print(price)

 - 주사위 3개를 사용하여 던진 값들을 먼저 입력받는다. 사용자에게 입력받기 위해 'input()'을 사용하였다,

 - '공백을 사이에 두고' 구분하여 숫자를 입력받기 때문에 'input().split()'으로 분리해준다.

 - input()을 통해 입력받은 값은 기본적으로 '문자열'이다. 숫자 계산을 위해선 '정수형'으로 변환시켜주어야 하므로, int속성을 각 요소별로 넣어주어야 한다. 대상이 리스트이기 때문에 'map()'함수를 활용하여 전체를 감싸주고, 속성 int를 넣어주었다. 

   ※ Tip(2) : map(옵션, 리스트) - 각 리스트의 요소에 '옵션'의 속성을 적용한다.
 - 입력받은 각 숫자는 리스트로 관리하기 위해 'list()'함수로 전체를 감싸준다.

 - 상금을 계산할 변수 'price'의 초기값을 0으로 선언해주었다. 

 - if문에서는 각 주사위의 숫자를 비교해준다.

   if문 중 가장 위 5개의 줄을 살펴보면 아래와 같다.

if dice[0] == dice[1]:
    if dice[0] == dice[2]:
        price = 10000 + dice[0]*1000
    else:
        price = 1000 + dice[0] * 100

 - 먼저 요소 중 첫번째(인덱스 0)와 두번째(인덱스 1) 주사위의 숫자를 비교하여 같을 때, 나머지 주사위(인덱스 2)와의 숫자를 비교하여 같다면 같은 눈이 3개일 때의 조건으로 상금을 계산해주고, 다르다면 같은 눈이 2개일 때의 조건으로 상금을 계산한다.

if dice[0] == dice[1]:
    if dice[0] == dice[2]:
        price = 10000 + dice[0]*1000
    else:
        price = 1000 + dice[0] * 100
elif dice[0] == dice[2]:
    price = 1000 + dice[0] * 100
elif dice[1] == dice[2]:
    price = 1000 + dice[1] * 100
else:
    price = max(dice) * 100

 - 6번째 줄 elif부터는 첫번째 주사위(인덱스 0)와 두번째 주사위(인덱스 1)이 다르다는 전제를 미리 깔고 있다. 그 상태에서 첫번째 주사위(인덱스 0)와 세번째 주사위(인덱스 2)가 같을 경우, 그리고 두번째 주사위(인덱스 1)와 세번째 주사위(인덱스 2)가 같을 경우의 상금을 각각 계산하여 price에 합산하도록 결과를 넣어준다.

 - 마지막 else 문에서는 세 개의 주사위의 눈이 모두 다를 경우이다. 이 때는 최대값 * 100원이 상금이기 때문에 max(dice) * 100의 결과를 price에 합산하도록 결과값을 넣었다.

 - if문이 완료되고 나면 결과를 출력하기 위해서 price를 'print()'문으로 출력해준다.

 


R. 리뷰

 - 세 개의 주사위의 눈의 값을 입력받지만 본 코드에서는 입력값이 3개인지, 또는 입력값이 6이상인지를 판별하여 구속하는 코드는 짜지 않았다. (백준 알고리즘의 경우 간혹 결과물이 나타나는 속도가 채점에 영향을 주기 때문에 문제에서 꼭 제시한 부분이 아니라면 제한을 주지 않았다.)

 - 이번 코드에서 가장 인상깊었던 부분은 map(int, input().split())를 통해 공백을 사이에 두고 정수를 입력받은 후 각각을 'list()'함수에 넣어주는 코드였다.

 - 또, if문을 통해 각각의 조건을 모두 입력하여 예외없이 만들어주는 알고리즘도 중요하다고 느꼈다.

반응형

댓글