본문 바로가기

IM대비

백준 10157 <자리배정>

728x90

시뮬레이션 기본 문제.

 

여기서 고려해야 할 부분은 이미 값을 체크한 부분은 가지 않게 boolean형 visit이차원 배열을 선언해서 이용했으며

 

관객에게 좌석을 배정할수 없을 경우는 k가 행*열 을 넘은 경우이다

 

문제 풀이

  1. k값을 입력받아 행*열 을 넘지 않으면 시작한다.
  2. count가 k가 될 때까지 계속 이동한다. 이동할 때 방문했거나 범위를 벗어나면 다음 방향으로 이동해준다.
  3. count 가 k값이 될 때 그 위치가 범위 안에 존재한다면 출력해주고 아니면 방향만큼 뒤로 갔다가 다음 방향으로 이동

 

이 분홍색 부분이 3번을 처리 한 부분이다.

 

전체 코드

더보기
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.StringTokenizer;

public class Main{

	static boolean map[][];
	static int c, r, k, dir[][] = { { 0, 1 }, { 1, 0 }, { 0, -1 }, { -1, 0 } }, now = 0, resultx, resulty;

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		c = Integer.parseInt(st.nextToken());
		r = Integer.parseInt(st.nextToken());
		map = new boolean[c][r];
		k = Integer.parseInt(br.readLine());
		if (k <= r * c) {
			go();
			if (resultx < 0 || resultx >= c || resulty < 0 || resulty >= r 
                || map[resultx][resulty]) {
				resultx -= dir[now][0];
				resulty -= dir[now][1];
				now = (now + 1) % 4;
				resultx += dir[now][0];
				resulty += dir[now][1];
				
			}
			System.out.print(resultx + 1 + " ");
			System.out.println(resulty + 1);
		}
		else {
			System.out.println(0);
		}
	}

	private static void go() {
		// TODO Auto-generated method stub
		int count = 1;
		while (count < k) {
			map[resultx][resulty] = true;
			resultx += dir[now][0];
			resulty += dir[now][1];
			if (resultx < 0 || resultx >= c || resulty < 0 || resulty >= r || map[resultx][resulty]) {
				resultx -= dir[now][0];
				resulty -= dir[now][1];
				now = (now + 1) % 4;
				resultx += dir[now][0];
				resulty += dir[now][1];
			}
			count++;
		}
	}
}

'IM대비' 카테고리의 다른 글

백준 2635 <수 이어가기>  (0) 2020.09.20
백준 2669 <직사각형 네개의 합집합의 면적 구하기>  (0) 2020.09.20
백준 2564 <경비원>  (0) 2020.09.20
백준 2477 <참외밭>  (0) 2020.09.19
백준 2491 <수열>  (0) 2020.09.19