걸림돌
- 세 수의 합으로 나올 수 있는 모든 경우의 수를 계산 하는 알고리즘을 짜는데 고민을 했음
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을 한 숫자가 가장 큰 경우의 수를 만든 사람이기 때문이다.
'BeakJoon > Python' 카테고리의 다른 글
[Python] 백준 #2941번 : 크로아티아 알파벳 [S-V] (1) | 2023.11.09 |
---|---|
[Python] 백준 1475번 방 번호 [S-V] (1) | 2023.11.09 |
[Python] 백준 #1181번 : 단어 정렬(S-V) (0) | 2023.11.08 |
[Python] 백준 #1316번 : 그룹 단어 체커 (S-V) (0) | 2023.11.08 |
[Python] 백준 #1402번 : 아무래도이문제는A번난이도인것같다 (1) | 2023.10.24 |