지금 사내에서 많은 사용자들이 컴퓨터에서 동일한 파일을 여러 개 복사하는 문제를 겪고 있는 상황입니다. 이로 인해 더 많은 메모리가 사용되고 있습니다.
그래서 여러분은 결국, 중복 파일을 모두 제거하는 프로그램을 개발하기로 결정했습니다.
여기서 컴퓨터의 작동 방식을 설명하겠습니다.
새 파일을 생성할 때마다 해당 파일은 고유한 ID를 받습니다. (기존 파일의 복사본을 만들 때 새로운 복사본은 새로운 ID를 받습니다.)
이 ID는 시간 즉, 생성 순서와 관련이 있으며 더 오래 전에 생성된 파일은 더 작은 ID를 가집니다. (그러나 ID는 반드시 연속적이지 않을 수 있습니다.)
또한 각 파일은 이름을 갖습니다. 하지만 여러 파일이 동일한 이름을 가질 수 있습니다. 동일한 이름을 가진 2 개 이상의 파일이 있는 경우 이 파일들의 내용은 모두 동일하며 가장 작은 ID를 가진 파일(가장 오래 전에 생성된 파일)의 복사본일 뿐입니다.
입력은 파일의 모든 목록과 이름, 그리고 ID와 함께 제공됩니다.
여러분이 수행할 태스크는 모든 중복 파일을 삭제하고 각 파일의 가장 오래된 복사본만 유지하는 것입니다!
프로그램은 최소 하나 이상의 테스트 케이스에서 작동합니다.
입력의 첫 번째 줄은 테스트 케이스의 수를 나타내는 정수 (1 ≤ ≤ 100)로 시작합니다.
그런 다음 개의 테스트 케이스가 이어집니다.
각 테스트 케이스는 파일의 수를 나타내는 정수 (1 ≤ N ≤ 105)으로 시작하며, 개의 줄이 뒤이어 따릅니다.
각 줄에는 파일 이름 다음에 파일 ID가 공백으로 구분되어 나타납니다.
파일 이름은 최대 10개의 소문자 영어 알파벳으로 이루어진 비어 있지 않은 문자열이며, ID는 최대 105까지의 양의 정수입니다.
각 테스트 케이스 내에서 모든 ID는 서로 다른 고윳값을 갖습니다.
각 테스트 케이스에 대해 삭제되지 않은 파일들의 ID를 나타내는 정수들을 오름차순으로 정렬합니다.
그 정수 값들을 공백 하나로 구분된 형태로 출력합니다.
Dictionary를 사용해서 쉽게 풀 수 있는 문제.
이미 해당 파일 이름이 Dict 내에 있고, 입력 받은 고유값이 원래 저장된 수보다 작으면 치환해준다.
그게 아니면 그냥 새로 할당해주면 된다.
그 후 value만 따로 정렬하여 출력하면 끝!
t = int(input())
for i in range(t):
file_n = int(input())
f_dict = {}
for i in range(file_n):
fname, fid = map(str, input().split())
fid = int(fid)
if fname in f_dict:
if f_dict[fname] > fid:
f_dict[fname] = fid
else:
f_dict[fname] = fid
values = sorted(f_dict.values())
print(*values)