https://www.acmicpc.net/problem/1268
코드
N = int(input())
num = [list(map(int, input().split())) for _ in range(N)]
s = 0
res = 1
for i in range(N):
cnt = [0] * N
for j in range(5):
for k in range(N):
if i != k and num[i][j] == num[k][j] and cnt[k] == 0:
cnt[k] += 1
if sum(cnt) > s:
s = sum(cnt)
res = i+1
print(res)
풀이
해당 문제를 풀면서 여러 번 틀린 결과를 제출하였는데, 문제 이해를 잘 못 한 것이었다.
내가 이해한 것은 '다른 학생과 가장 많은 횟수로 같은 반을 해본 학생'이었고, 실제 문제에서 원하던 것은 '다른 학생과 같은 반을 많이 해본 학생'이었다. 전자는 1번 학생이 3번 학생과 4번 같은 반을 하면 모두 카운트로 인정하지만 후자는 1번 학생이 3번 학생과 4번을 하든 1번을 하든 무조건 1번으로 카운트 한다는 점이 다르다.
따라서 아래와 같은 로직으로 코드를 작성하였다.
각 학생이 각 학년별로 다른 학생과 같은 반일 때 cnt라는 리스트를 이용해 이미 해당 학생과 같은 반이라는 것이 다른 학년에서 카운트 되지 않았다면 cnt 값을 늘려주는 것이다. 그렇다면 cnt 리스트는 특정 학생과 같은 반을 했는지의 여부가 담길 것이다. 따라서, 이를 합해주면 n번째 학생이 다른 학생과 반을 해본 횟수가 더해질 것이다.
'Python > Coding Test' 카테고리의 다른 글
[백준] 2812 : 크게 만들기 (0) | 2024.04.08 |
---|---|
[백준] 17298 : 오큰수 (0) | 2024.04.08 |
[백준] 1439 : 뒤집기 (1) | 2024.03.07 |
[프로그래머스] 키패드 누르기 (1) | 2024.02.26 |
[프로그래머스] 신규 아이디 추천 (0) | 2024.02.26 |