백준 2480번 - 주사위 세 개 with python
Q. 1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다.
- 같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다.
- 같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)×100원의 상금을 받게 된다.
- 모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)×100원의 상금을 받게 된다.
예를 들어, 3개의 눈 3, 3, 6이 주어지면 상금은 1,000+3×100으로 계산되어 1,300원을 받게 된다. 또 3개의 눈이 2, 2, 2로 주어지면 10,000+2×1,000 으로 계산되어 12,000원을 받게 된다. 3개의 눈이 6, 2, 5로 주어지면 그중 가장 큰 값이 6이므로 6×100으로 계산되어 600원을 상금으로 받게 된다.
3개 주사위의 나온 눈이 주어질 때, 상금을 계산하는 프로그램을 작성 하시오.
[입력] 첫째 줄에 3개의 눈이 빈칸을 사이에 두고 각각 주어진다.
[출력] 첫째 줄에 게임의 상금을 출력 한다.
각 경우에 대해 생각해보겠다.
1. 3개 주사위의 나온 눈이 주어질 때(input), 같은 눈이 3개가 나오면(if) 10000 + (같은눈)*100을 출력(print)한다.
2. 같은 눈이 2개만 나오는 경우(elif), 1000원 + (같은눈)*100을 출력(print)한다.
3. 모두 다른 눈이 나오는 경우(else)에는 (그 중 가장 큰 눈)*100을 출력(print)한다.
먼저 A,B,C에 각각 주사위의 눈의 수를 받는다.
A, B, C = map(int,input().split())
첫 번째로, 3개의 주사위가 모두 같은 눈이 나온다면 조건식은
A == B == C
일 것이고,
두 번째로, 같은 눈이 2개만 나온다면 A와 B의 눈이 같거나(or), A와 C의 눈이 같거나(or), B와 C의 눈이 같을 것이다.
그래서 코드로 표현하면
A == B or A == C or B == C
일 것이며,
마지막으로 모두 다 다른 눈이 나올 경우는 A와 B의 눈이 같지 않고(and), A와 C의 눈이 같지 않고(and), B와 C의 눈이 같지 않아야 한다.
A != B and A != C and B != C
그럼 전체적은 skeleton을 알았으니, if문을 작성해보자.
1. 3개 주사위의 나온 눈이 주어질 때(input), 같은 눈이 3개가 나오면(if) 10000 + (같은눈)*100을 출력(print)한다.
2. 같은 눈이 2개만 나오는 경우(elif), 1000원 + (같은눈)*100을 출력(print)한다.
3. 모두 다른 눈이 나오는 경우(else)에는 (그 중 가장 큰 눈)*100을 출력(print)한다.
첫 번째 조건문은 주어진 상황에 맞게 값을 출력해주면 된다. 상금을 계산할 때 눈의 수에 대한 수식으로 나오게 되는데, 이 조건식에서 눈의 수는 모두 동일하기 때문이다.
두 번째 경우에서는, "같은 눈"에 대한 식을 출력해주어야 한다.
그래서 우리는 계산을 위해 같은 눈을 찾아야하는데, if문을 중첩해주면 된다.
A, B, C 중에서 같은 눈이 2개만 나올 때,
A와 B가 같다면 A의 눈의 수를 출력시키고(∵A와 B가 동일하므로 둘 중 아무거나 출력시켜도 상관 없음), ---(1)
A와 C가 같다면 A의 눈의 수를 출력시키고, ---(2)
B와 C가 같다면 B의 눈의 수를 출력시킨다. ---(3)
여기서 (1)과 (2)는 출력해주는 눈의 수가 A로 동일하다. 그래서 두 조건을 or로 묶어 처리할 수 있다.
세 번째 경우에서는 모두 다 다른 눈이 나올 때, 가장 큰 눈을 출력해주어야한다.
이는 파이썬 내장함수인 max()함수를 사용하여 출력해주면 된다.
max(num1,num2,num3,...)을 실행시키면 괄호 속에 있는 숫자 중 제일 큰 값이 출력된다.
위에 설명들을 정리하여 코드로 표현하면
A, B, C = map(int,input().split())
if (A == B == C):
print(10000 + A*1000)
elif(A == B or A == C or B== C):
if(A == B or A == C):
print(1000 + num1*100)
elif(B == C):
print(1000 + num2*100)
else:
print(max(A, B, C)*100)
처럼 표현할 수 있다.
그럼 백준문제 속 예제를 출력해보겠다.

세 눈이 모두 동일하게 4가 나올 때, 10000 + 4*1000 = 14000이 잘 출력됨을 볼 수 있다.

두개만 같은 눈인 3 3 6을 입력했을 때, 조건문을 잘 찾아 값을 계산하였다.

세 눈이 모두 다를 때, 세 눈의 수 중에서 가장 큰 값인 6을 잘 선택한 후 100을 곱해준 것을 확인할 수 있다.
'우당탕탕 파이썬 with 하루하나 알고리즘' 카테고리의 다른 글
백준 10950 파이썬 - for문을 활용해 A+B 구하기 (0) | 2022.03.20 |
---|---|
백준 2739 파이썬 - for문을 사용하여 구구단을 외자! (0) | 2022.03.19 |
백준 2525 파이썬 - if문을 활용해 일정 시간이 지난 시각 확인하기 (0) | 2022.03.17 |
백준 2884 파이썬 - if문을 사용해 45분 앞서는 시간 확인하기 (0) | 2022.03.16 |
백준 14681 파이썬 - if문을 활용하여 사분면 번호 출력하기 (0) | 2022.03.15 |