portableangel   9년 전

https://www.acmicpc.net/problem/1091

입력과 출력으로 문제를 유추해서 풀었는데, 수정될 부분이 많은 것 같습니다. ㅠㅠ 번거로운 건의 죄송합니다.


현재 디스크립션은 아래와 같습니다.


지민이는 카지노의 딜러이고, 지금 3명의 플레이어(0, 1, 2번)가 있다. 이 게임은 N개의 카드를 이용한다. (0~N-1번)

일단 지민이는 카드를 몇 번 섞은 다음에, 그것을 플레이어들에게 나누어 준다. A) 0번째 위치에 있던 카드가 플레이어 1에게 가고, 1번째 위치에 있던 카드는 플레이어 2에게 가고, 2번째 위치에 있던 카드는 플레이어 3에게 가고, 3번째 위치에 있던 카드는 플레이어 0에게 가고, 이런식으로 카드를 나누어 준다. 하지만, 지민이는 약간 사기를 치려고 한다.

지민이는 처음에 카드를 섞기 전에 카드의 순서를 알고 있다. A-2 )

카드를 섞을 때는 주어진 방법을 이용해서만 섞을 수 있다. 카드의 개수와 같은 크기가 N인 배열이 주어진다. 이 배열을 S라고 하자.

카드를 한 번 섞을 때면, i위치에 있던 카드는 S[i]로 간다. B) 입력으로 각 카드가 어떤 플레이어에게 가야 하는지 주어진다. 이 때, C) 몇 번 섞어야 각 카드가 해당하는 플레이어에게 가는지 구하는 프로그램을 작성하시오.


A ) 일단 의미상으로는 플레이어 1, 2, 3, 0이 아니라 0, 1, 2, 0으로 가는 것이 맞습니다. 하지만 수정 이전에 디스크립션의 이 문단은 통째로 빼는 것이 좋을 것 같습니다. '카드를 나누어주는 규칙'은 실제 문제와 관련이 없기 때문입니다. 아래의 C번 설명에서 더 언급하겠습니다.

A-2 ) A번 문장이 포함된 문단을 삭제하고, 이 A-2 부분에 이 처음의 순서가 입력으로 주어진다. 의 의미를 가지는 문장이 필요합니다.

B ) 자세히 생각해보면 맞는 말이긴 하지만, 오해의 여지가 다분한 듯 합니다. 실제 입력으로는 섞지 않고 그대로 카드를 나누어 주각각 어느 플레이어에게 카드가 가게 되는지가 들어옵니다. 다시 말해, 카드의 초기 상태가 주어집니다. 또한, 플레이어가 0, 1, 2밖에 없기 때문에, 이 배열은 0, 1, 2로만 이루어져 있고, 또한 각 0, 1, 2의 수는 정확히 N/3이라는 조건이 추가적으로 필요할 것 같습니다.

C ) B번의 오류 아닌 오류가 정말 오류가 되는 이유가 이 부분 때문입니다. B의 설명과 같이 읽으면 초기 0, 1, 2, 0, 1, 2, ... 으로 세팅된 카드를 입력으로 주어지는 배열대로 섞는 문제 같지만, 실제로 문제의 목적은 초기 입력으로 주어진 배열대로 세팅된 카드를 0, 1, 2, 0, 1, 2, 0, 1, 2 ... 로 만드는 것이니까요. 즉, 문제의 실제 의도는 현재 디스크립션의 역방향입니다. 따라서 C의 알맞은 표현은 몇 번 섞어야 카드를 순서대로 0, 1, 2, 0, 1, 2, 0, 1, 2, ... 번 플레이어에게 줄 수 있는지 정도가 맞다고 생각합니다.


현재 입력 설명은 다음과 같습니다.


첫째 줄에 N이 주어진다. N은 3보다 크거나 같고, 48보다 작거나 같은 3의 배수이다. A ) 둘째 줄에는 각 카드가 어떤 플레이어에게 가야 하는지 주어진다. 셋째줄에는 배열 S가 주어진다. 배열 S에 있는 수는 모두 N-1보다 작거나 같은 B ) 자연수이고 중복되지 않는다.


A ) 문제 디스크립션에서와 마찬가지로, '섞지 않고 카드를 나누어주면 각 카드가 어떤 플레이어에게 가는지' 가 입력으로 들어옵니다.

B ) 음이 아닌 정수 혹은 0과 자연수라는 표현이 맞습니다. 사실 이 부분은 배열 S에는 0부터 N-1까지의 수가 한 번씩 등장한다고 하는 편이 더 직관적인 의미가 될 것 같습니다.


현재 출력 설명은 다음과 같습니다.


A ) 첫재 줄에 몇 번 섞어야 하는지 출력한다. 만약, 섞어도 섞어도 카드를 해당하는 플레이어에게 줄 수 없다면, -1을 출력한다.


A ) 일단은 오타가 있습니다. 첫재 -> 첫째

그리고, 몇 번 섞어야 카드를 순서대로 0, 1, 2, 0, 1, 2, 0, 1, 2, ... 번 플레이어에게 줄 수 있는지를 출력한다. 로 확실하게 설명하는 편이 좋을 것 같습니다.


헐.. 번거로운 수정 죄송합니다. ㅠㅠ

그리고 혹시라도 여지껏 이 문제에 대해 어마어마한 궁금증을 지니고 계셨던 분들, 축하드립니다. 어서 푸세요 ㅋㅋㅋㅋ

댓글을 작성하려면 로그인해야 합니다.