https://www.acmicpc.net/problem/1268
1268번: 임시 반장 정하기
오민식 선생님은 올해 형택초등학교 6학년 1반 담임을 맡게 되었다. 오민식 선생님은 우선 임시로 반장을 정하고 학생들이 서로 친숙해진 후에 정식으로 선거를 통해 반장을 선출하려고 한다.
www.acmicpc.net
문제
오민식 선생님은 올해 형택초등학교 6학년 1반 담임을 맡게 되었다. 오민식 선생님은 우선 임시로 반장을 정하고 학생들이 서로 친숙해진 후에 정식으로 선거를 통해 반장을 선출하려고 한다. 그는 자기반 학생 중에서 1학년부터 5학년까지 지내오면서 한번이라도 같은 반이었던 사람이 가장 많은 학생을 임시 반장으로 정하려 한다.
그래서 오민식 선생님은 각 학생들이 1학년부터 5학년까지 몇 반에 속했었는지를 나타내는 표를 만들었다. 예를 들어 학생 수가 5명일 때의 표를 살펴보자.
1학년 | 2학년 | 3학년 | 4학년 | 5학년 | |
1번 학생 | 2 | 3 | 1 | 7 | 3 |
2번 학생 | 4 | 1 | 9 | 6 | 8 |
3번 학생 | 5 | 5 | 2 | 4 | 4 |
4번 학생 | 6 | 5 | 2 | 6 | 7 |
5번 학생 | 8 | 4 | 2 | 2 | 2 |
위 경우에 4번 학생을 보면 3번 학생과 2학년 때 같은 반이었고, 3번 학생 및 5번 학생과 3학년 때 같은 반이었으며, 2번 학생과는 4학년 때 같은 반이었음을 알 수 있다. 그러므로 이 학급에서 4번 학생과 한번이라도 같은 반이었던 사람은 2번 학생, 3번 학생과 5번 학생으로 모두 3명이다. 이 예에서 4번 학생이 전체 학생 중에서 같은 반이었던 학생 수가 제일 많으므로 임시 반장이 된다.
각 학생들이 1학년부터 5학년까지 속했던 반이 주어질 때, 임시 반장을 정하는 프로그램을 작성하시오.
입력
첫째 줄에는 반의 학생 수를 나타내는 정수가 주어진다. 학생 수는 3 이상 1000 이하이다. 둘째 줄부터는 1번 학생부터 차례대로 각 줄마다 1학년부터 5학년까지 몇 반에 속했었는지를 나타내는 5개의 정수가 빈칸 하나를 사이에 두고 주어진다. 주어지는 정수는 모두 1 이상 9 이하의 정수이다.
출력
첫 줄에 임시 반장으로 정해진 학생의 번호를 출력한다. 단, 임시 반장이 될 수 있는 학생이 여러 명인 경우에는 그 중 가장 작은 번호만 출력한다.
내 풀이
# 31120kb 828ms
stu_num = int(input())
class_list = []
# 모든 학생의 반 정보를 class_list에 담기
for _ in range(1,stu_num+1):
studnets = list(map(int, input().split()))
class_list.append(studnets)
cnt = []
for ban in class_list: # n번 학생의 반 목록 확인
i_stu_num = []
for i in range(5): # 1-5학년 길이동안
for n in range(stu_num): # 학생의 수 만큼
if ban[i] == class_list[n][i]: # n번학생의 반 정보를 바탕으로 비교
i_stu_num.append(n)
else:
pass
cnt.append(len(list(set(i_stu_num)))-1)
# 같은 반이었던 n번 학생의 정보를 set로 중복 제거하고, 자신을 포함하여 카운트 되서 -1 해줌
# 예) n번학생과 같은반인 학생 수의 최고값을 출력 (인덱스값이므로 +1 해서 번호로 나오게)
print(cnt.index(max(cnt))+1)
메모
꽤나 어려워서 몇시간 고민한 문제
각 학생의 같은 학년이었던 학생 수를 학년 마다 구하는 문제가 아니라
각 학생의 같은 학년이었던 n번 학생이 몇 명인지 구하는 문제여서
3중 for문까지 돌아가야 idx를 파악하고, n번 학생의 리스트를 따로 담아서 카운트 할 수 있었다.
물론 사실상 첫 번째 for문은 이중 리스트를 풀어서 반복문을 돌리기 위한 과정이긴 하다.
'파이썬 알고리즘 연습' 카테고리의 다른 글
[Python | 백준 1296번] 팀 이름 정하기 (1) | 2024.01.24 |
---|---|
[Python | 백준 1292번] 쉽게 푸는 문제 (1) | 2024.01.24 |
[Python | 백준 1259번] 팰린드롬수 (0) | 2024.01.22 |
[Python | 백준 1236번] 성 지키기 (0) | 2024.01.22 |
[Python | 백준 1157번] 단어 공부 (0) | 2024.01.22 |