Coding - Algo/Java
[백준] 10157번:자리배정 (Java 자바)
jainn
2021. 8. 27. 23:03
728x90
문제
https://www.acmicpc.net/problem/10157
10157번: 자리배정
첫 줄에는 공연장의 격자 크기를 나타내는 정수 C와 R이 하나의 공백을 사이에 두고 차례대로 주어진다. 두 값의 범위는 5 ≤ C, R ≤ 1,000이다. 그 다음 줄에는 어떤 관객의 대기번호 K가 주어진다.
www.acmicpc.net
풀이 및 소스코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
st = new StringTokenizer(br.readLine());
int m = Integer.parseInt(st.nextToken()); //가로, 열
int n = Integer.parseInt(st.nextToken()); //세로, 행
int k = Integer.parseInt(br.readLine());
if(k==1) { //첫번째 관객일 경우
System.out.println("1 1");
System.exit(0);
}
if(m*n<k) { //배정할 수 없는 경우
System.out.println("0");
System.exit(0);
}
int[][] arr = new int[n][m];
int[] dx = {1, 0, -1, 0};
int[] dy = {0, 1, 0, -1};
int x = 0;
int y = 0;
int cnt = 1;
arr[x][y] = 1;
outer: while(true) {
for(int i=0;i<4;i++) {
while(true) {
x = x+dx[i];
y = y+dy[i];
if(0>x||n<=x||0>y||m<=y) {
x = x-dx[i];
y = y-dy[i];
break;
}
if(arr[x][y]!=0) {
x = x-dx[i];
y = y-dy[i];
break;
}
arr[x][y] = ++cnt;
if(cnt==k) {
System.out.println((y+1)+" "+(x+1));
break outer;
}
}
}
}
}
}
반응형