찰리의 놀이터

(C언어) 자리배정 - 백준 10157번 본문

알고리즘 공부

(C언어) 자리배정 - 백준 10157번

차알리 2021. 4. 13. 18:07

자리배정

시간제한: 1 Sec 메모리제한: 64 MB

제출: 283 해결: 88

어떤 공연장에는 가로로 C , 세로로 R 개의 좌석이 C × R 격자형으로 배치되어 있다. 각 좌석의 번호는 해당 격자의 좌표 (x,y) 로 표시된다.

예를 들어보자. 아래 그림은 가로 7, 세로 6개 좌석으로 구성된 7 × 6 격자형 좌석배치를 보여주고 있다. 그림에서 각 단위 사각형은 개별 좌석을 나타내며, 그 안에 표시된 값 (x,y) 는 해당 좌석의 번호를 나타낸다. 가장 왼쪽 아래의 좌석번호는 (1,1)이며, 가장 오른쪽 위 좌석의 번호는 (7,6) 이다.

이 공연장에 입장하기 위하여 많은 사람이 대기줄에 서있다. 기다리고 있는 사람들은 제일 앞에서부터 1, 2, 3, 4, ... 순으로 대기번호표를 받았다. 우리는 대기번호를 가진 사람들에 대하여 (1,1) 위치 좌석부터 시작하여 시계방향으로 돌아가면서 비어있는 좌석에 관객을 순서대로 배정한다. 이것을 좀 더 구체적으로 설명하면 다음과 같다.

먼저 첫 번째 사람, 즉 대기번호 1인 사람은 자리 (1,1) 에 배정한다. 그 다음에는 위쪽 방향의 좌석으로 올라가면서 다음 사람들을 배정한다. 만일 더 이상 위쪽 방향으로 빈 좌석이 없으면 오른쪽으로 가면서 배정한다. 오른쪽에 더 이상 빈자리가 없으면 아래쪽으로 내려간다. 그리고 아래쪽에 더 이상 자리가 없으면 왼쪽으로 가면서 남은 빈 좌석을 배정한다. 이 후 왼쪽으로 더 이상의 빈 좌석이 없으면 다시 위쪽으로 배정하고, 이 과정을 모든 좌석이 배정될 때까지 반복한다.

아래 그림은 7 × 6 공연장에서 대기번호 1번부터 42번까지의 관객이 좌석에 배정된 결과를 보여주고 있다.

여러분은 공연장의 크기를 나타내는 자연수 C  R 이 주어져 있을 때, 대기 순서가 K 인 관객에게 배정될 좌석 번호 (x,y) 를 찾는 프로그램을 작성해야 한다.

입력형식

입력파일의 이름은 input.txt로 한다.

입력파일의 첫 줄에는 공연장의 격자 크기를 나타내는 정수 C  R 이 하나의 공백을 사이에 두고 차례대로 주어진다. 두 값의 범위는 5  C, R  1,000 이다.

그 다음 줄에는 어떤 관객의 대기번호 K 가 주어진다.  1  K  100,000,000 이다.

출력형식

출력파일의 이름은 output.txt이다.

여러분은 입력파일에 제시된 대기번호 K 인 관객에게 배정될 좌석번호 (x,y) 를 구해서 두 값, x y를 하나의 공백을 사이에 두고 출력해야 한다.

만일 모든 좌석이 배정되어 해당 대기번호의 관객에게 좌석을 배정할 수 없는 경우에는 0(숫자 영)을 출력해야 한다.

입력

7 6

11

출력

6 6

입력

7 6

87

출력

0

입력

100 100

3000

출력

9 64

---------------------------------------------------------------------문제풀이-------------------------------------------------------------------------------

이 문제는 앞에서 선행하여 문제 풀이를 했던 골뱅이 문제가 응용된다고 생각했습니다.

그래서 우선 가로세로를 입력받아 골뱅이를 만들었습니다 !

대신 그 때는 오른쪽으로 먼저 진행하던 골뱅이를 이번에는 아래쪽으로 먼저 진행하도록 했습니다.

gist.github.com/HyeonsooKim/3fb8503d257b73cc5a4c8ca6c2bdf0e0.js"></script>

이 코드를 입력하면 가로세로 값이 출력되는데 사실 여기서 배열을 입력할 필요도 없지만 눈으로 쉽게 파악하기 위해 한 번 짜봤습니다.

출력하면 이런 모습이 나옵니다.

하지만 원래 문제와 출력하는 방향이 위아래로 대칭인 모습입니다.

문제에서는 좌표평면을 사용하고 우리는 코드를 사용하기 때문에 좌표를 맞추려면 대칭이 되는 모습입니다.