본문 바로가기

알고리즘/백준

1268. 임시 반장 정하기

문제 보러가기

🅰 설계

반의 정보를 입력으로 받고, 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