문제
월드초등학교 학생회장 후보는 일정 기간 동안 전체 학생의 추천에 의하여 정해진 수만큼 선정된다. 그래서 학교 홈페이지에 추천받은 학생의 사진을 게시할 수 있는 사진틀을 후보의 수만큼 만들었다. 추천받은 학생의 사진을 사진틀에 게시하고 추천받은 횟수를 표시하는 규칙은 다음과 같다.
- 학생들이 추천을 시작하기 전에 모든 사진틀은 비어있다.
- 어떤 학생이 특정 학생을 추천하면, 추천받은 학생의 사진이 반드시 사진틀에 게시되어야 한다.
- 비어있는 사진틀이 없는 경우에는 현재까지 추천 받은 횟수가 가장 적은 학생의 사진을 삭제하고, 그 자리에 새롭게 추천받은 학생의 사진을 게시한다. 이때, 현재까지 추천 받은 횟수가 가장 적은 학생이 두 명 이상일 경우에는 그러한 학생들 중 게시된 지 가장 오래된 사진을 삭제한다.
- 현재 사진이 게시된 학생이 다른 학생의 추천을 받은 경우에는 추천받은 횟수만 증가시킨다.
- 사진틀에 게시된 사진이 삭제되는 경우에는 해당 학생이 추천받은 횟수는 0으로 바뀐다.
후보의 수 즉, 사진틀의 개수와 전체 학생의 추천 결과가 추천받은 순서대로 주어졌을 때, 최종 후보가 누구인지 결정하는 프로그램을 작성하시오.
입력
첫째 줄에는 사진틀의 개수 N이 주어진다. (1 ≤ N ≤ 20) 둘째 줄에는 전체 학생의 총 추천 횟수가 주어지고, 셋째 줄에는 추천받은 학생을 나타내는 번호가 빈 칸을 사이에 두고 추천받은 순서대로 주어진다. 총 추천 횟수는 1,000번 이하이며 학생을 나타내는 번호는 1부터 100까지의 자연수이다.
출력
사진틀에 사진이 게재된 최종 후보의 학생 번호를 증가하는 순서대로 출력한다.
내가 쓴 코드
from sys import stdin; input = stdin.readline
N = int(input()) # 사진 틀의 수
rec_num = int(input()) # 추천 횟수
rec = list(map(int, input().split())) # 추천 순서
pic = []
visit = [0] * N
for r in rec:
# 빈 자리 있을 경우
if len(pic) < N:
# 이미 존재하는 경우
if r in pic:
visit[pic.index(r)] += 1
# 없는 값
else:
pic.append(r)
visit[len(pic) - 1] = 1
# 빈 자리 없을 경우
else:
# 이미 존재
if r in pic:
visit[pic.index(r)] += 1
# 없는 값
else:
# visit 값 가장 작은 거 삭제
for p in range(len(pic)):
if visit[p] == min(visit):
pic.remove(pic[p])
visit.pop(p)
visit.append(0)
break
pic.append(r)
visit[len(pic) - 1] = 1
pic.sort()
print(*pic)
하핫 ...
아니 진짜 다 풀어놓고 한참 헤멨다... 근데 답은 나오는데... 환장구리!!
결국 알아낸 문제점은 인덱스였다. 아니 처음 푼 코드에서 찾은 문제점부터 말하자면, 마지막 for문 안에 있는 if문에서 가장 오래된 최저 추천수인 사진을 지우고나서 visit 초기화 처리를 해주지 않았다.. 그래서 고쳐서 제출했는데 또 틀려.. 후 하 !
그래서 결국 알아낸 문제점이 인덱스라는 거다. 이게 내가 이틀에 걸쳐 문제를 풀어서 고치다 말고 한 코드가 몇 개 됐었는데,, 그 중에 인덱스 고친 코드가 있긴 했었다. 하지만 그걸 기억 못하고 인덱스가 안고쳐진 코드를 제출하고 있었다.. 그래서 결론적으로 고친 인덱스가 뭐냐면, visit 리스트다. 처음 코드에는 visit = [0] * (N + 1) 와 visit 체크할 때 visit[len(pic)] = 1로 썼었다. 하지만 이건 틀린 게 맞다. pic을 빈 리스트에서부터 시작하기 때문에 visit 도 인덱스를 1부터가 아니라 0부터 하는 게 맞는 거였다. 쨋든 해결해서 다행... 수고했다 나자신 !
제출 결과

'Algorithm > Python' 카테고리의 다른 글
| [BOJ #2839] 설탕 배달 (1) | 2024.03.26 |
|---|---|
| [BOJ #24482] 알고리즘 수업 - 깊이 우선 탐색 4 (2) | 2024.03.25 |
| [BOJ #1991] 트리 순회 (1) | 2024.03.21 |
| [SWEA #11891] 분할정복 - 병합정렬 (1) | 2024.03.18 |
| [BOJ #18870] 좌표 압축 (2) | 2024.03.18 |