youngseo's TECH blog

[PS | 한 번에 맞자!] 백준 1713 본문

알고리즘/세부구현

[PS | 한 번에 맞자!] 백준 1713

jeonyoungseo 2023. 7. 15. 09:20

0. 문제

후보 추천하기

 

1713번: 후보 추천하기

첫째 줄에는 사진틀의 개수 N이 주어진다. (1 ≤ N ≤ 20) 둘째 줄에는 전체 학생의 총 추천 횟수가 주어지고, 셋째 줄에는 추천받은 학생을 나타내는 번호가 빈 칸을 사이에 두고 추천받은 순서대

www.acmicpc.net


1. 문제 생각

1<=N<=20에 1<=추천횟수<=1000이라서
내가 생각했던 풀이인
for N + N정렬 + for M 을 동시에 해봤자 N*NlogN*M으로 1초 안에 통과한다.

그래서 그냥 바로 구현에 들어갔다!


2. 문제 구현

N=int(input())
M=int(input())
List=list(map(int,input().split()))

Picture=[[0,0,0] for _ in range(N)] #학생, 추천횟수
for i in range(M):
    flag=False
    for j in Picture:
        if j[0]==List[i] : 
            j[1]+=1
            flag=True
            break
        elif j[0]==0: 
            j[0]=List[i]; j[1]+=1; j[2]=i
            flag=True
            break
    if not flag:
        Picture=sorted(Picture, key = lambda x:[x[1], x[2]])
        Picture[0][0]=List[i]
        Picture[0][1]=1
        Picture[0][2]=i
    
    # print(Picture)
ans=[]
for i in Picture:
    if i[0]>0:
        ans.append(i[0])
ans=sorted(ans)
print(*ans)

3. 한번에 풀었는가? X

역시 정답률 31퍼센인 명성과 같게 히든케이스를 하나 놓칠 수 있다. 
아래와 같이 사진틀보다 적은 최종후보가 선정되었을 때 0을 출력할 수 있는 실수가 있을 수 있다!

3
4
1 2 1 2
#답
1 2
#오답
0 1 2