공지 records의 각 항목은 [channel, urgency, time, id]예요. 전체 공지를 urgency가 큰 순서 → time이 작은 순서 → id가 작은 순서로 정렬해요. 정렬된 순서에서 채널별 첫 공지 하나만 선택하고, 선택된 공지의 id를 그 순서대로 반환해요.
solution(records)가 id 목록을 반환하도록 빈칸을 채워 주세요. 여러 번의 sort는 같은 키의 기존 순서를 유지해요.
매개변수와 반환값
- 공지 수 n은 1
500, channel은 1100, urgency는 15, time은 01,000이에요. - id는 1~10,000이고 모든 공지에서 서로 달라요.
- 같은 채널의 공지가 여러 개일 수 있고 반환값 길이는 서로 다른 채널 수예요.
예시
records = [[1, 3, 10, 40], [2, 5, 9, 30], [1, 5, 8, 20], [3, 5, 9, 10]]이면 결과는[20, 10, 30]이에요.records = [[7, 2, 1, 9], [7, 2, 1, 3], [8, 2, 0, 5]]이면 결과는[5, 3]이에요.
실행용 입출력
첫 줄에 n, 다음 n줄에 channel urgency time id를 입력해요. 반환 id를 한 줄에 출력해요.
예시 입력
4 1 3 10 40 2 5 9 30 1 5 8 20 3 5 9 10
예상 결과
20 10 30
예시 입력
3 7 2 1 9 7 2 1 3 8 2 0 5
예상 결과
5 3
핵심 개념
basic-sort-search:.sort(key=...)는 리스트 자체를 정렬해요.lambda item: item[3]는 한 공지에서 비교할 id를 꺼내는 짧은 함수예요.reverse=True이면 그 키가 큰 값부터 정렬해요.counting-aggregation:used = set()은 이미 선택한 채널을 저장해요.in·not in으로 확인하고.add(channel)로 기록해요.array-1d:[record[:] for record in records]는 각 공지 리스트도 복사해 원래 records의 순서를 유지해요.for channel, urgency, time, identity in ordered는 네 항목을 각각의 변수로 나누어 읽어요.
Python 정렬은 안정 정렬이에요. 같은 키끼리는 직전 순서를 유지하므로 여러 번 정렬할 때 우선순위가 낮은 키부터 적용해요. 높은 우선순위부터 정렬하면 다음 정렬이 그 순서를 다시 바꿀 수 있어요.
입력 하네스의 input()은 한 줄의 문자열을 읽고, .split()은 공백으로 항목을 나눠요. map(int, ...)는 각 항목을 정수로 바꾸고 list(...)는 그 결과를 리스트로 모아요. range(n)은 0부터 n-1까지 반복해요. 하네스는 함수 호출을 위한 자체 연결이며 풀이의 반환 계약과 구분해요.