출처 : https://www.acmicpc.net/problem/1268
n = int(input())
stu = []
for i in range(n) :
stu.append(list(map(int, input().split())))
same = [0] * n
for i in range(n-1) :
already = []
for j in range(5) :
for k in range(i+1, n) :
if stu[i][j] == stu[k][j] :
if k not in already :
same[i] += 1
same[k] += 1
already.append(k)
else :
pass
sol = same.index(max(same)) + 1
print(sol)
먼저 학생들의 정보를 저장할 빈 리스트 stu를 만들고, 입력 받는 순서대로 리스트로 저장해준다.
stu는 2차원 리스트이며 stu[i]는 i번 학생이 1학년부터 5학년까지 몇 반에 속했는지를 저장한 리스트이다.
또한 각 학생이 같은 반을 했던 학생 수를 저장하는 same 리스트를 생성한다.
i번째 학생이 j학년이었을 때, k번째(i+1부터 n까지) 학생 중 j학년일때 같은 반이었던 학생이 몇 명인지 센다.
만약 같은 반이었던 학생이 있으면, i와 k의 same 값에 1씩 더해준다.
또한 already라는 리스트를 만들어 이미 같은 반이었다고 센 학생을 중복해서 세지 않도록 한다.
예를 들어 5번째 학생이 3학년 때 9번째 학생과 같은 반이었는데, 5학년 때 또 같은 반이었다면 세지 않아야 한다.
k값을 already에 저장하고 k가 already에 들어있으면 same 값을 더하지 않는다.
1부터 n-1번째 학생까지 이 과정을 반복하고(n번째 학생은 이전의 n-1번 셀 때 모두 계산됨),
same의 값들 중 가장 큰 값의 인덱스 번호+1을 출력하면 된다.
* PyPy3은 괜찮지만 Python3으로 제출 시 시간초과가 뜬다.
'알고리즘 문제 풀이' 카테고리의 다른 글
백준 11652번 : 카드 (Python) (0) | 2022.11.01 |
---|---|
백준 1740번 : 거듭제곱 (Python) (0) | 2022.10.26 |
백준 1026번 : 보물 (Python) (0) | 2022.10.20 |
프로그래머스 행렬의 덧셈 (Python) (0) | 2022.10.19 |
프로그래머스 멀리 뛰기 (Python) (0) | 2022.10.19 |
댓글