본문 바로가기

PS/백준

[BOJ] 백준 10157 자리배정 (Swift)

반응형

문제

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

 

10157번: 자리배정

첫 줄에는 공연장의 격자 크기를 나타내는 정수 C와 R이 하나의 공백을 사이에 두고 차례대로 주어진다. 두 값의 범위는 5 ≤ C, R ≤ 1,000이다. 그 다음 줄에는 어떤 관객의 대기번호 K가 주어진다.

www.acmicpc.net

풀이

가로와 세로 길이에 따른 규칙을 구할 수는 없었습니다.

가로 세로가 최대 1,000 이므로 1,000 * 1,000 = 1,000,000으로 완전탐색으로 시간내에 풀이할 수 있다고 생각해
직접 좌석을 배정해 주는 방식으로 풀어야겠다고 생각이 들었습니다.

대기번호가로 * 세로 보다 크다면, 좌석을 배정할 수 없는 경우입니다.

아니라면, 2차원 배열을 사용하여 0,0 부터 자리를 지정해 줍시다.
뱡향은 시계방향이며, 북 동 남 서 방향입니다.

문제에서는 왼쪽 하단부터 0,0 이지만 저희는 편의성을 위해 왼쪽 상단부터 0,0으로 좌표를 설정해줍시다.
또한 남 동 북 서 로 방향을 바꿔주어야 합니다.

2차원 배열을 0으로 초기화 시켜주고,
배열의 크기를 벗어나지 않고, 배열의 원소가 0이라면 지나갈 수 있는 경우겠죠?
그런 경우 현재 방향으로 이동시켜줍시다.

배열의 크기를 벗어나거나, 배열의 원소가 0이라면?
방향을 바꿔줍시다.

2차원 배열의 원소를 하나씩 채우면서
입력받은 대기번호를 지정할 때, x 값과 y값을 출력해줍시다.

소스코드

후기

좌석을 채우는 시뮬레이션 문제입니다.
범위를 벗어나거나 이미 좌석번호를 채웠다면 방향을 바꿔주는 부분에서 신경을 써야했던 문제입니다.

반응형