백준
(python) 백준 2480 - 주사위 세개(2가지 풀이)
komizke
2023. 1. 9. 00:00
https://www.acmicpc.net/problem/2480
2480번: 주사위 세개
1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다. 같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다. 같은 눈이 2개
www.acmicpc.net
1. 문제 설명
세 개의 주사위를 던진 후 중복된 숫자 개수에 따라 상금을 다르게 받게 된다.
2. 문제 풀이(1)
if - elif - else 구문으로 각 조건을 정의하고 그 조건에 맞는 가격을 계산한다.
number_list = list(map(int, input().split()))
#세개가 같은 경우
if number_list[0] == number_list[1] and number_list[1] == number_list[2]:
print(10000 + number_list[0]*1000)
#두개가 같은 경우
elif number_list[0] == number_list[1] and number_list[1] != number_list[2]:
print(1000 + number_list[0]*100)
elif number_list[1] == number_list[2] and number_list[0] != number_list[1]:
print(1000 + number_list[1]*100)
elif number_list[0] == number_list[2] and number_list[1] != number_list[0]:
print(1000 + number_list[0]*100)
#전부 다른 경우
else:
print(max(number_list) * 100)
3. 문제풀이(2)
문제풀이(1)에서 두 개의 주사위가 같은 경우에 조건들을 하나하나 전부 작성한 부분을 개선.
개선 방법
1) 인덱스 0, 1, 2 중에서 두 개를 뽑는 경우를 조합으로 계산하여 리스트에 저장
2) 그 리스트에 저장된 값으로 두개의 주사위를 비교하여 같은 수를 찾아 상금 계산
from itertools import combinations
number_list = list(map(int, input().split()))
idx_list = [0,1,2] #nuber_list의 인덱스 리스트
combi = list(combinations(idx_list,2)) #인덱스 조합계산
#세개가 같은 경우
if number_list[0] == number_list[1] and number_list[1] == number_list[2]:
print(10000 + number_list[0]*1000)
#전부 다른 경우
elif number_list[0] != number_list[1] and number_list[1] != number_list[2] and number_list[0] != number_list[2]:
print(max(number_list) * 100)
else:
for i in combi:
if number_list[i[0]] == number_list[i[1]]: #두개가 다른 경우
print(1000 + number_list[i[0]] * 100)
break