🌟 숫자 게임
조건
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
2 초 | 128 MB | 8027 | 3435 | 2832 | 43.144% |
문제
N명이 모여 숫자 게임을 하고자 한다. 각 사람에게는 1부터 10사이의 수가 적혀진 다섯 장의 카드가 주어진다. 그 중 세 장의 카드를 골라 합을 구한 후 일의 자리 수가 가장 큰 사람이 게임을 이기게 된다. 세 장의 카드가 (7, 8, 10)인 경우에는 합은 7+8+10 = 25가 되고 일의 자리 수는 5가 된다. 어떤 사람이 받은 카드가 (7, 5, 5, 4, 9)인 경우 (7, 4, 9)를 선택하면 합이 20이 되어 일의 자리 수는 0이 되고, (5, 5, 9)를 선택하면 합이 19가 되어 일의 자리 수는 9가 된다. 게임을 이기기 위해서는 세 장의 카드를 선택할 때 그 합의 일의 자리 수가 가장 크게 되도록 선택하여야 한다.
예를 들어, N=3일 때
- 1번 사람이 (7, 5, 5, 4, 9),
- 2번 사람이 (1, 1, 1, 1, 1),
- 3번 사람이 (2, 3, 3, 2, 10)의
카드들을 받았을 경우, 세 수의 합에서 일의 자리 수가 가장 크게 되도록 세 수를 선택하면
- 1번 사람은 (5, 5, 9)에서 9,
- 2번 사람은 (1, 1, 1)에서 3,
- 3번 사람은 (2, 3, 3)에서 8의
결과를 각각 얻을 수 있으므로 첫 번째 사람이 이 게임을 이기게 된다.
N명에게 각각 다섯 장의 카드가 주어졌을 때, 세 장의 카드를 골라 합을 구한 후 일의 자리 수가 가장 큰 사람을 찾는 프로그램을 작성하시오. 가장 큰 수를 갖는 사람이 두 명 이상일 경우에는 번호가 가장 큰 사람의 번호를 출력한다.
입력
첫 줄에는 사람의 수를 나타내는 정수 N이 주어진다. N은 2이상 1,000이하이다. 그 다음 N 줄에는 1번부터 N번까지 각 사람이 가진 카드가 주어지는 데, 각 줄에는 1부터 10사이의 정수가 다섯 개씩 주어진다. 각 정수 사이에는 한 개의 빈칸이 있다.
출력
게임에서 이긴 사람의 번호를 첫 번째 줄에 출력한다. 이긴 사람이 두 명 이상일 경우에는 번호가 가장 큰 사람의 번호를 출력한다.
예제 입력 1
3
7 5 5 4 9
1 1 1 1 1
2 3 3 2 10
예제 출력 1
1
풀이 계획 및 고민
전체 모든 경우를 생각해봐야겠다 하고 세 개의 숫자 조합을 찾는 4중 중첩 반복문을 만들어서 돌렸다. 찾는 과정에서 각각의 3장의 카드의 숫자의 합의 일의 자리 수의 최댓값을 who에 담고 who의 인덱스와 값을 확인하여 최댓값을 가진 인덱스들 중 가장 큰 인덱스를 출력하는 방식으로 풀었다. enumerate는 처음 사용해보았는데 배열의 인덱스와 값을 동시에 접근할 수 있게 해주는 메소드라고 한다. enumerate() 함수는 기본적으로 인덱스와 원소로 이루어진 튜플(tuple)을 만들어주기 때문에 인덱스와 원소를 각각 다른 변수에 할당하고 싶다면 인자 풀기(unpacking)를 해주어야 한다. 처음에는 최댓값이 같을 경우 더 나중 인덱스를 출력해야한다는 조건을 모르고 풀어서 계속 틀렸다고 나왔었다. 시간 초과라도 나왔으면 더 줄일 생각이라도 했을 텐데 방법을 못찾다가 뒤늦게 고쳤다. 문제를 잘 읽자..
풀이
import sys
read = sys.stdin.readline
def solution():
# 입력 받기
n = int(read())
arr = [list(map(int, read().split())) for _ in range(n)]
who = [] # 누가 이겼는지 값과 인덱스를 관리하기 위한 배열
for i in range(n):
digits = 0 # 각 사람의 3장의 카드의 숫자의 합의 일의 자리 수의 최댓값
for j in range(len(arr[i])):
for k in range(j + 1, len(arr[i])):
for l in range(k + 1, len(arr[i])):
this_digit = (arr[i][j] + arr[i][k] + arr[i][l]) % 10
if this_digit > digits:
digits = this_digit
who.append(digits)
# who의 인덱스와 값을 확인하여 최댓값을 가진 인덱스들 중 가장 큰 인덱스 출력
print(max([i for i, v in enumerate(who) if v == max(who)]) + 1)
solution()
'백준 알고리즘' 카테고리의 다른 글
[BOJ] 백준_10817번_세 수_Python3 (0) | 2023.11.29 |
---|---|
[BOJ] 백준_2751번_수 정렬하기 2_Python3 (3) | 2023.11.28 |
[BOJ] 백준_1931번_회의실 배정_Python3 (2) | 2023.11.25 |
[BOJ] 백준_1541번_잃어버린 괄호_Python3 (0) | 2023.11.24 |
[BOJ] 백준_2012번_등수 매기기_C/C++ (6) | 2022.02.27 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!