728x90
SMALL
import sys; input=sys.stdin.readline
from itertools import combinations
n = int(input())
max_scores = []
for person in range(1, n+1):
cards = list(map(int, input().split()))
max_score = 0
for combo in combinations(cards, 3):
score = sum(combo) % 10
max_score = max(max_score, score)
max_scores.append((max_score, person))
winner = max(max_scores, key=lambda x: (x[0], x[1]))[1]
print(winner)
왜 이렇게 풀었을까?
- 처음 문제를 맞이할 때, '5개의 카드 중 3개를 골라 그 카드들의 연산을 통해 이뤄지는 문제'라고 여겨졌기에 브루트포스로 풀고자 코드 작성을 시작하였습니다.
- 이때, 3중 반복문으로 진행할 수도 있었지만, 저에겐 친숙한 combinations 함수가 있었습니다! 이 함수로 손쉽게 5개 중 3개의 카드를 골라낼 수 있었습니다.
- 1의 자리를 바탕으로 결과를 출력해야 했기에 3개 카드의 합을 10으로 나눈 나머지를 score 변수에 담았고, 이 score들 간 max_score를 추출해서 리스트에 추가해줬습니다.
- 최대값이 같을 경우 번호가 더 큰 사람의 번호를 출력해야 했기에 정렬 후 winner를 출력하였습니다.
728x90
LIST
'알고리즘 문제 > 랜덤 마라톤 (solved.ac)' 카테고리의 다른 글
🥇 2230번: 수 고르기 (0) | 2025.02.26 |
---|---|
🥈 24417번: 알고리즘 수업 - 피보나치 수 2 (2) | 2025.01.31 |
🥈 3060번: 욕심쟁이 돼지 (2) | 2024.10.07 |
🥈 5568번: 카드 놓기 (2) | 2024.09.13 |
🥈 25329번: 학생별 통화 요금 계산 (0) | 2024.08.23 |