본문 바로가기
알고리즘/백준

[JAVA]백준_10157_자리배정

by 박 현 황 2021. 2. 25.

문제링크

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

 

10157번: 자리배정

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

www.acmicpc.net

 

 

 

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