좌석 맞바꾸기
문제
한 독서실에는 좌석이 n개 있고, 각 좌석에는 1번부터 n번까지 번호가 붙어 있다. 좌석마다 안내판이 하나 붙어 있고, 안내판에는 그 좌석에 앉은 사람이 옮겨 갈 좌석의 번호가 적혀 있다. 안내판의 번호는 1 이상 n 이하의 자연수이며, 서로 다른 좌석의 안내판에 같은 번호가 적혀 있을 수도 있고 자기 좌석의 번호가 적혀 있을 수도 있다.
관리자는 좌석 몇 개를 골라, 고른 좌석에 앉은 사람들만 동시에 안내판이 가리키는 좌석으로 옮기게 하려고 한다. 이때 자리를 옮긴 뒤에도 고른 좌석이 모두 한 명씩 채워져 있어야 하고, 고르지 않은 좌석은 건드리지 않아야 한다. 그러려면 고른 좌석의 번호를 모은 것과, 고른 좌석의 안내판에 적힌 번호를 모은 것이 똑같아야 한다. 고른 좌석 가운데 하나라도 안내판이 고르지 않은 좌석을 가리키면 그 좌석으로 사람이 밀려들어 조건이 깨진다.
안내판의 정보가 주어졌을 때, 위 조건을 만족하며 고를 수 있는 좌석의 최대 개수와 그때 고른 좌석의 번호를 구하는 프로그램을 작성하여라. 고른 좌석의 번호는 작은 것부터 차례대로 내놓는다.
예를 들어 n=7인 독서실의 안내판이 다음의 표와 같다고 해보자.
| 좌석 번호 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|
| 안내판의 번호 | 3 | 1 | 1 | 5 | 5 | 4 | 6 |
이때 1번, 3번, 5번 좌석을 고르면 조건을 만족한다. 고른 좌석의 번호를 모으면 1, 3, 5이고, 고른 좌석의 안내판에 적힌 번호를 모으면 1번 좌석의 3, 3번 좌석의 1, 5번 좌석의 5이므로 역시 1, 3, 5다.
| 고른 좌석 | 1 | 3 | 5 |
|---|---|---|---|
| 안내판의 번호 | 3 | 1 | 5 |
여기에 2번 좌석을 더하면 안내판의 번호에 1이 두 번 들어가므로 1번 좌석에 두 명이 몰려 조건이 깨진다. 4번이나 6번이나 7번을 더해도 고르지 않은 좌석을 가리키는 안내판이 생긴다. 따라서 현재 예시에서 고를 수 있는 좌석의 최대 개수는 3이고 그 번호는 작은 것부터 1, 3, 5다.
입출력 예시
예시 1
입력
7 3 1 1 5 5 4 6
출력
3 1 3 5
예시 2
입력
3 3 3 2
출력
2 2 3
예시 3
입력
7 3 4 5 5 2 3 2
출력
3 2 4 5
입력 조건
가장 먼저 첫째 줄에 좌석의 개수 n이 주어진다. n은 1 이상 100 이하의 자연수다.
이어서 n개의 줄에 걸쳐 1번부터 n번까지의 좌석에 붙은 안내판의 번호가 한 줄에 하나씩 차례대로 주어진다. 즉 둘째 줄은 1번 좌석의 안내판이고, 셋째 줄은 2번 좌석의 안내판이다. 각 번호는 1 이상 n 이하의 자연수이며, 같은 번호가 여러 줄에 나올 수 있다.
출력 조건
첫째 줄에 조건을 만족하며 고를 수 있는 좌석의 최대 개수를 출력한다. 이어서 그때 고른 좌석의 번호를 작은 것부터 차례대로 한 줄에 하나씩 출력한다.
요구사항
- 고른 좌석의 번호를 모은 것과, 고른 좌석의 안내판에 적힌 번호를 모은 것이 같아야 합니다
- 고르지 않은 좌석은 건드리지 않습니다
- 조건을 만족하며 고를 수 있는 좌석의 개수가 가장 많은 경우를 찾습니다
- 첫째 줄에 개수를 적고, 그 뒤에 고른 좌석의 번호를 작은 것부터 한 줄에 하나씩 적습니다
- 표준 입력으로 읽고 표준 출력으로 내보내는 프로그램을 짜야 합니다
- 쓸 수 있는 말은 파이썬, 자바스크립트입니다
- 메모리 제한은 256MB입니다. 브라우저에서는 재지 않고 적기만 합니다
- 시간 제한은 출제자의 정답 코드를 같은 런타임에서 재서 정합니다
- 이 문제는 프롬프트가 아니라 코드를 냅니다. 그 코드는 이 기기의 브라우저에서 돌고, 서버로는 나온 출력의 지문과 걸린 시간만 갑니다. 맞았는지는 서버가 정합니다. 실행 시간은 각자 기기가 적어 보내는 값이라, 코드와 기기 정보를 순위표에 같이 내걸어 둡니다.
- 출력이 글자 하나까지 기대값과 같아야 합니다. 줄 안의 빈칸은 다른 글자와 똑같이 봅니다.
- 케이스는 15개이고, 그 가운데 3개는 입력과 기대 출력을 함께 보여 줍니다. 나머지는 제출할 때만 쓰이고 화면에는 보여 주지 않습니다.
- 케이스 15개를 전부 통과해야 해결입니다.
예시
공개 케이스 3개입니다. 채점에는 숨은 케이스가 함께 쓰입니다. 케이스 15개를 전부 통과해야 해결입니다.
3 3 3 2
2 2 3
7 3 4 5 5 2 3 2
3 2 4 5
7 3 1 1 5 5 4 6
3 1 3 5
풀이
코드는 이 기기에서돕니다. 서버로는 나온 출력의 지문과 걸린 시간만 갑니다. 맞았는지는 서버가 정합니다.
제출은 로그인 하셔야 됩니다. 공개 케이스로 돌려보는 것은 로그인 없이도 됩니다.
공개 케이스 3개로 돌려보기가 됩니다. 제출하면 숨은 케이스까지 돕니다.
이 문제를 푼 사람
아직 없습니다. 첫 번째가 되실 수 있습니다.