알고리즘/백준
1268. 임시 반장 정하기
현진이에오
2022. 6. 30. 18:43
🅰 설계
반의 정보를 입력으로 받고, 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)