🅰 설계
반의 정보를 입력으로 받고, N명이 같은 반이었던 사람의 수를 카운팅하기 위해서 cnt 라는 리스트를 선언한다.
cnt = [0] * N
그 후엔, N명을 순환해야하는데, 이때 5개의 학년에 대해서 순환해야하고, 그리고 순환할 때 자기 자신과는 비교하면 안된다.
비교의 기준이 되는 학생과 나머지 학생과 같은 반 이었던 적이 있으면 visited 를 True 로 바꾼다.
마지막에는 visited 의 True 값의 합을 cnt 의 각 학생에 해당하는 곳의 인덱스에 저장한다.
✅ 후기
// 새롭게 알게되거나 공유해서 알게된 점
세로로 나열된 변수들을 관리하기 위해서 새로운 리스트를 만들었고 그 리스트에 변수들을 넣었다.(몇 반이었는지) 어떠한 학년에서 같은 반이 었던 아이들은 반복문을 통해서 찾으면서 그 위치를 1로 넣었다.
// 고생한 점
각 학생마다 같은 반이었던 적이 있는 학생들을 세로로 탐색해야되서 뭔가 불편함을 느꼈고, 계속 이 상황을 기록해야하는 변수가 늘어나는등, 코드가 복잡해졌다. 상황을 간단하게 만들어 보려고 많이 노력했다. 변수를 줄이기 위해서 리스트에 기록하는 방법을 썼다.
import sys
input = sys.stdin.readline
N = int(input())
data = [list(map(int, input().split())) for _ in range(N)]
cnt = [0] * N
for n in range(N):
visited = [False for _ in range(N)]
for grade in range(5):
for student_id in range(N):
if student_id != n and data[student_id][grade] == data[n][grade]:
visited[student_id] = True
cnt[n] = len(list(filter(lambda x: x, visited)))
print(cnt.index(max(cnt)) + 1)
'알고리즘 > 백준' 카테고리의 다른 글
12865. 평범한 배낭 (with 시온) (0) | 2022.06.17 |
---|---|
13334. 철로 (0) | 2022.06.10 |
1195. 킥다운 (0) | 2022.06.09 |
16968. 배열 복원하기 (0) | 2022.06.04 |
15591. Mootube (0) | 2022.05.01 |