안녕하세요, 성조입니다.
이번 문제는 Python 3 버전으로 풀이됐습니다.
처음에 코드를 잘못 날려서 1 / 1 / 1으로 3번이나 코드를 바꾼 문제네요..
간단하게 생각하고 정리하면 좋을 것 같습니다.
문제 출처
https://www.acmicpc.net/problem/2476
2476번: 주사위 게임
첫째 줄에는 참여하는 사람 수 N이 주어지고 그 다음 줄부터 N개의 줄에 사람들이 주사위를 던진 3개의 눈이 빈칸을 사이에 두고 각각 주어진다.
www.acmicpc.net
문제
1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다.
1) 같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다.
2) 같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)×100원의 상금을 받게 된다.
3) 모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)×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원을 상금으로 받게 된다.
N(2 ≤ N ≤ 1,000)명이 주사위 게임에 참여하였을 때, 가장 많은 상금을 받은 사람의 상금을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에는 참여하는 사람 수 N이 주어지고 그 다음 줄부터 N개의 줄에 사람들이 주사위를 던진 3개의 눈이 빈칸을 사이에 두고 각각 주어진다.
출력
첫째 줄에 가장 많은 상금을 받은 사람의 상금을 출력한다.
코드
import sys
num = int(input())
req = 0
res = 0
for _ in range(num):
aData, bData, cData = map(int,sys.stdin.readline().split())
if aData == bData == cData:
res = max(res, 10000 + (aData*1000))
elif aData == bData:
res = max(res, 1000 + aData * 100)
elif aData == cData:
res = max(res, 1000 + aData * 100)
elif bData == cData:
res = max(res, 1000 + bData * 100)
else:
req = max(aData,bData,cData)
res = max(res, req*100)
print(res)
풀이
1) 3가지 조건이 맞는 경우 어차피 같은 조건이므로 그 값을 곱해준다.
2) 두 개씩 맞는 경우 a와 b, a와 c, b와 c를 각각 확인할 경우에 있는 것 중 같은 값을 곱 연산한다.
3) 만약 값이 없는 경우 가장 큰 주사위의 눈을 가지고 값을 구한다.
본인의 경우 모든 숫자가 다른 경우. max 함수를 활용하여 가장 큰 값을 구했다.
이후 조건에 맞춰진 값을 출력하면 경우의 수를 모두 만족하는 값을 출력하므로 문제를 해결할 수 있다.
오타나 이해가 안 가는 부분이 있다면 언제든지 댓글로 얘기해 주시면 감사드리겠습니다.
다음 포스팅 때 뵙겠습니다.
'백준 - Python' 카테고리의 다른 글
[백준 - 1463][Python] 1로 만들기 (0) | 2023.01.26 |
---|---|
[백준 - 2822][Python] 점수 계산 (0) | 2023.01.25 |
[백준 - 1920][Java] 수 찾기 (0) | 2023.01.19 |
[백준 - 10989][Python] 수 정렬하기 3 (0) | 2023.01.17 |
[백준 - 9506][Python] 약수들의 합 (0) | 2023.01.16 |