문제
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개의 눈이 빈칸을 사이에 두고 각각 주어진다.
출력
첫째 줄에 게임의 상금을 출력 한다.
# 해결법
입력을 변수에 각각 담아서 모두 비교해볼까 생각했는데 그냥 list로 받아서 반복문을 사용해서 해결해보기로 했다.
우선 입력값을 받는 intVar 변수를 만들고 각각의 index의 값이 몇개씩 있는지 확인하기 위해서 for문 두개를 사용했다. 중복된 값을 확인하고는 조건문으로 list의 조건을 설정하고 사칙연산을 실행했다.
# 나의 코드
intVar = list(map(int, input().split()))
cnt = [0, 0, 0]
result = 0
for i in range(3):
for j in range(3):
if intVar[i] == intVar[j]:
cnt[i] += 1
if cnt == [1, 1, 1]:
result = max(intVar) * 100
elif cnt == [1, 2, 2]:
result = 1000 + intVar[1] * 100
elif cnt == [2, 1, 2]:
result = 1000 + intVar[0] * 100
elif cnt == [2, 2, 1]:
result = 1000 + intVar[0] * 100
elif cnt == [3, 3, 3]:
result = 10000 + intVar[0] * 1000
print(result)
# 개선사항
정답으로 인정받았지만 조건문의 분기가 조금 깔끔하지 못하다는 생각이 들었다. 개선할 방법이 없을까 생각해보다 count를 사용하는 방법이 생각나서 추가적으로 개선해보았다. 요즘 자바와 자바스크립트 위주로 사용하다보니 파이썬의 기능들이 많이 가물가물한 것 같아서 더 노력해야겠다.
# 수정코드
intVar = list(map(int, input().split()))
for i in range(3):
result = 0
if intVar.count(intVar[i]) == 3: # 모두 같을경우 카운트는 3, 3, 3
result = 10000 + intVar[i] * 1000
break
elif intVar.count(intVar[i]) == 2: # 같은 숫자가 2개일 경우 계산후 탈출
result = 1000 + intVar[i] * 100
break
else :
if i == 2 : # 끝까지 중복되는 경우가 없었다면 모두 다른것으로 판단
result = max(intVar) * 100
continue # 1, 2, 2인 경우가 있을 수 있기때문에 continue
print(result)
'Python' 카테고리의 다른 글
백준 10250 - ACM 호텔(파이썬) (0) | 2022.06.12 |
---|---|
백준 2525 - 오븐 시계 (파이썬) (0) | 2022.04.06 |
백준 18108 - 1998년생인 내가 태국에서는 2541년생?! (파이썬) (0) | 2022.04.04 |
백준 10926 - ??! (파이썬) (0) | 2022.04.02 |
백준 1193 - 분수찾기 (파이썬) (2) | 2021.09.30 |