BeakJoon/Python
[Python] 백준 #2303번 : 숫자 게임 (S-V)
쿼딩~
2023. 11. 9. 02:03
걸림돌
- 세 수의 합으로 나올 수 있는 모든 경우의 수를 계산 하는 알고리즘을 짜는데 고민을 했음
for i in range(5):
for j in range(i+1, 5):
for m in range(j+1, 5):
digit = (card[i]+card[j]+card[m])%10
위 코드로 고민을 해결했음
for문을 총 세 개로 각각 i, j, m에 아래로 내려 갈 때 마다 i+1, j+1 부터 시작하는 for문으로 세 수의 합으로 나올 수 있는 모든 경우의 수를 고려할 수 있게 했음.
- 모든 경우의 수를 고려하고 가장 큰 경우의 수를 구하는 방법을 고민했음
max_digit = 0
for i in range(5):
for j in range(i+1, 5):
for m in range(j+1, 5):
digit = (card[i]+card[j]+card[m])%10
if digit >= max_digit:
max_digit = digit
score.append(max_digit)
위 코드에 맨 처음에 max_digit 변수를 0으로 만들고 아래 알고리즘으로 찾은 경우의 수가 max_digit에 들어있는 수보다 크다면 그 경우의 수를 max_digit에 넣고 다시 알고리즘을 돌려서 이 수 보다 큰 경우의 수를 찾게끔 만들었다.
그리고 마지막엔 max_digit으로 찾은 수를 score라는 배열에 넣었다.
코드
N = int(input())
score = []
for _ in range(N):
card = list(map(int,input().split()))
max_digit = 0
for i in range(5):
for j in range(i+1, 5):
for m in range(j+1, 5):
digit = (card[i]+card[j]+card[m])%10
if digit >= max_digit:
max_digit = digit
score.append(max_digit)
for i in range(N-1, -1, -1):
if score[i] == max(score):
print(i + 1)
break
위 코드는 제출한 코드다.
for i in range(N-1, -1, -1):
if score[i] == max(score):
print(i + 1)
break
걸림돌에서 설명한 코드에서 위의 코드를 추가했는데 추가한 이유는 가장 큰 경우의 수를 만든 사람을 찾기 위한 알고리즘을 짜야하기 때문이다.
총 사람 수에서 -1을 한 수 부터 시작해서 -1 까지 진행하는 for문을 만들고 1씩 작아지는 수를 i에 대입되게 만들었다.
이렇게 하면 socre 배열의 가장 오른쪽 인덱스 부터 가장 왼쪽 인덱스 까지 score 중 가장 큰 수와 비교를 하다 같은 수가 들어있는 인덱스를 찾으면 그 인덱스의 번호에 +1을 한 숫자가 가장 큰 경우의 수를 만든 사람이기 때문이다.