Notice
Recent Posts
Recent Comments
Link
jyamethyst21 님의 블로그
백준 2476번- '주사위 게임' (PYTHON 풀이) 본문
문제:

N번 숫자를 받고 해당하는 수만큼 주사위 3개를 돌릴건데 그 수 중 3개가 모두 겹치는 경우, 2개만 겹치는 경우, 모두 다른 눈이 나오는 경우를 확인해서 각 상황에 맞는 공식에 따라 상금을 계산하여 가장 큰 수인 사람의 금액을 출력하면 된다.
풀이:
N = int(input())
result = []
for i in range(N):
a,b,c = map(int,input().split())
li = [a,b,c]
if a == b == c:
result.append(10000+a*1000)
elif a == b:
result.append(1000+a*100)
elif b == c:
result.append(1000+b*100)
elif a == c:
result.append(1000+c*100)
elif a != b and b != c and a != c:
result.append(max(li)*100)
print(max(result))
처음에 바로 생각났던 건 if문을 활용해서 주사위가 3개뿐이니 각 변수를 비교하면서 진행하면 된다고 생각했다. 어려운 코드 부분은 없어서 자세한 설명은 생략하겠다.
N = int(input())
result = []
for _ in range(N):
dice = list(map(int, input().split()))
s = set(dice)
if len(s) == 1:
result.append(10000 + dice[0] * 1000)
elif len(s) == 2:
for x in s:
if dice.count(x) == 2:
result.append(1000 + x * 100)
break
else:
result.append(max(dice) * 100)
print(max(result))
그런데 if문을 활용한 경우에는 만약 주사위 수가 많아질 때 변수를 추가해서 생성해야 하므로 비효율적이라고 생각했다. 그래서 다른 방법이 없을까 고민해보았는데 두번째 코드 처럼 set을 활용하면 된다!
set은 중복 데이터를 없애주므로 모든 입력을 받은 뒤 set의 값이 1개이면 모두 겹치는 경우가 된다. 2개인 경우는 3개 중 2개만 겹치는 경우가 될 것이다. 단, 이때 그냥 max(s)를 쓰게 되면 한번만 나온 수가 클 경우엔 문제가 발생할 수 있기 때문에 dice 리스트를 카운트해서 2번 나온 x에 대해서 수식을 계산해주어야 한다.
여기까지하면 result에는 각 수식을 통해 계산된 상금이 계산될 것이므로, max를 활용해서 값을 출력하면 된다!
'CODING 💻' 카테고리의 다른 글
| 백준 2875번- '대회 or 인턴' (PYTHON 풀이) (0) | 2026.01.15 |
|---|---|
| 백준 10768번- '특별한 날' (PYTHON 풀이) (0) | 2026.01.14 |
| 백준 5596번- '소음' (PYTHON 풀이) (0) | 2026.01.12 |
| 백준 5596번- '시험 점수' (PYTHON 풀이) (0) | 2026.01.11 |
| 백준 2576번- '홀수' (PYTHON 풀이) (0) | 2026.01.10 |
