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을 한 숫자가 가장 큰 경우의 수를 만든 사람이기 때문이다.