문제링크
https://www.acmicpc.net/problem/10157
import java.util.Arrays;
import java.util.Scanner;
public class Main {
static int C,R;
static int K;
static int map[][];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
C = sc.nextInt(); //가로
R = sc.nextInt(); //세로
K = sc.nextInt(); //관객의 대기번호
map = new int[R][C];
int num = 1;
int row = R, col = 0;
int i;
int Result[] = new int[2];
boolean isTrue =true;
while(isTrue) {
//사방위 탐색해서 다 값이 있으면 ㅌㅌ
if(K > R*C) break;
if(row-1>=0 && row+1<R && col-1>=0 && col+1>C &&
map[row-1][col] !=0 && map[row+1][col] !=0 && map[row][col-1] !=0 && map[row][col+1] !=0) break;
//상
for(i=row-1;i>=0;i--) {
if(map[i][col] != 0) break;
map[i][col] = num++;
if(map[i][col] == K) {
Result[0] = i;
Result[1] = col;
isTrue = false;
}
}
row = i+1;
//우
for(i=col+1;i<C;i++) {
if(map[row][i] !=0) break;
map[row][i] = num++;
if(map[row][i] == K) {
Result[0] = row;
Result[1] = i;
isTrue = false;
}
}
col = i-1;
//하
for(i=row+1;i<R;i++) {
if(map[i][col] !=0) break;
map[i][col] = num++;
if(map[i][col] == K) {
Result[0] = i;
Result[1] = col;
isTrue = false;
}
}
row = i-1;
//좌
for(i=col-1;i>=0;i--) {
if(map[row][i] !=0) break;
map[row][i] = num++;
if(map[row][i] == K) {
Result[0] = row;
Result[1] = i;
isTrue = false;
}
}
col = i+1;
}
if(K>(R*C)) System.out.println(0);
else
System.out.println((Result[1]+1)+" "+(R-Result[0]));
}
}
상->우->하->좌 순서로 회전하기 때문에 while문 안에서 뱅글뱅글 돌았습니다.
중간에 K(대기하는 사람 순번)이 전체 배열 크기인 R*C보다 크면 안되기 때문에 break;시켜주었고
한바퀴를 돌고 도착하였을 때 사방위가 막혔어도 탈출하였습니다.
'알고리즘 > 백준' 카테고리의 다른 글
[JAVA][C++]백준_2941_크로아티아 알파벳 (0) | 2021.02.25 |
---|---|
[JAVA]백준_2578_빙고 (0) | 2021.02.25 |
[JAVA]백준_14696_딱지놀이 (0) | 2021.02.23 |
[JAVA]백준_10163_색종이 (0) | 2021.02.23 |
[JAVA]백준_13300_방배정 (0) | 2021.02.23 |