3 ๋ถ„ ์†Œ์š”

๐Ÿ“ [G4_3190] ๋ฑ€

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Deque;
import java.util.LinkedList;
import java.util.StringTokenizer;


public class Main{
	static int[][] board;
	static ArrayList<Integer> list_num;
	static ArrayList<String> list_str;
	static Deque<Node> node;
	static int dx, dy;
	static int N, K, L;
	static int res, cnt;

	public static class Node {
		int x;
		int y;

		public Node(int x, int y) {
			this.x = x;
			this.y = y;
		}
	}

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;

		// **** input start ****
		N = Integer.parseInt(br.readLine());
		K = Integer.parseInt(br.readLine());

		// ์ „์ฒด ๋ณด๋“œ
		board = new int[N][N];

		// ์‚ฌ๊ณผ ์œ„์น˜ ์ €์žฅ
		for (int i = 0; i < K; i++) {
			st = new StringTokenizer(br.readLine(), " ");
			int y = Integer.parseInt(st.nextToken());
			int x = Integer.parseInt(st.nextToken());

			// ์‚ฌ๊ณผ์œ„์น˜ 1๋กœ ์ €์žฅ
			board[y - 1][x - 1] = 1;
		}

		// ๋ฐฉํ–ฅ๋ณ€ํ™˜ ๋ฆฌ์ŠคํŠธ
		L = Integer.parseInt(br.readLine());
		// ์ˆ˜ ์ €์žฅ
		list_num = new ArrayList<>();
		// ๋ฌธ์ž์ €์žฅ
		list_str = new ArrayList<>();
		for (int i = 0; i < L; i++) {
			st = new StringTokenizer(br.readLine(), " ");
			int num = Integer.parseInt(st.nextToken());
			String str = st.nextToken();

			list_num.add(num);
			list_str.add(str);
		}

		// ์ฒ˜์Œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™
		dx = 1;
		dy = 0;

		cnt = 0;
		res = 0;

		// deque ์ƒ์„ฑ
		node = new LinkedList<>();
		// ์ฒซ ์ขŒํ‘œ ์‚ฝ์ž…
		node.add(new Node(0, 0));
		// ์žฌ๊ท€ ์‹œ์ž‘
		recursive(0, 0);

		System.out.println(res);
	}

	static void recursive(int x, int y) {
		// ์นด์šดํŒ… + 1
		cnt++;


		// ์ขŒํ‘œ ์ด๋™์„ ํ•˜๊ณ  ๋งˆ์ง€๋ง‰์— ๋ฐฉํ–ฅ์„ ๋ฐ”๊พผ๋‹ค
		// ๋‹ค์Œ ์ขŒํ‘œ
		int nx = x + dx;
		int ny = y + dy;

		// ๋งŒ์•ฝ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๊ฑฐ๋‚˜ ์ž๊ธฐ ๋ชธ์— ๋‹ฟ์ผ ๊ฒฝ์šฐ ๋
		if (nx < 0 || ny < 0 || nx > N - 1 || ny > N - 1) {
			// ๊ฐ’ ์ €์žฅ
			res = cnt;
			return;
		}

		for(Node list : node) {
			if(list.x == nx && list.y == ny) {
				// ๊ฐ’ ์ €์žฅ
				res = cnt;
				return;
			}
		}

		// ์‚ฌ๊ณผ ์—†๋Š”์ง€ ์ฒดํฌ -> ์—†์œผ๋ฉด ๊ผฌ๋ฆฌ ์‚ญ์ œ
		if (board[ny][nx] == 0) {
			node.removeLast();
		}

		// ์‚ฌ๊ณผ ๋จน๊ณ  ์‚ญ์ œ
		if(board[ny][nx] == 1) {
			board[ny][nx] = 0;
		}

		// ๋จธ๋ฆฌ ๋‹ค์Œ์นธ ์ด๋™ ( ๋งจ ์•ž์— ์‚ฝ์ž… )
		node.addFirst(new Node(nx, ny));

		if (list_num.size() > 0) {
			if (cnt == list_num.get(0)) {
				change(list_str.get(0).charAt(0));
				// ์‚ฌ์šฉํ•œ ๊ฒƒ ์‚ญ์ œํ•ด์ฃผ๊ธฐ
				list_num.remove(0);
				list_str.remove(0);
			}
		}

		// ๋ฐ˜๋ณต
		recursive(nx, ny);
	}

	// ๋ฐฉํ–ฅ ์ „ํ™˜
	static void change(char c) {
		// ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋ฐ”๊พธ๊ธฐ
		if (c == 'D') {
			// ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊ฐ€๊ณ  ์žˆ์œผ๋ฉด ์•„๋ž˜์ชฝ์œผ๋กœ
			if (dx == 1 && dy == 0) {
				dx = 0;
				dy = 1;
			}
			// ๋ฐ‘์œผ๋กœ ๊ฐ€๊ณ  ์žˆ์œผ๋ฉด ์™ผ์ชฝ์œผ๋กœ
			else if (dx == 0 && dy == 1) {
				dx = -1;
				dy = 0;
			}
			// ์™ผ์ชฝ์œผ๋กœ ๊ฐ€๊ณ  ์žˆ์œผ๋ฉด ์œ„์ชฝ์œผ๋กœ
			else if (dx == -1 && dy == 0) {
				dx = 0;
				dy = -1;
			}
			// ์œ„์ชฝ์œผ๋กœ ๊ฐ€๊ณ  ์žˆ์œผ๋ฉด ์˜ค๋ฅธ์ชฝ์œผ๋กœ
			else if (dx == 0 && dy == -1) {
				dx = 1;
				dy = 0;
			}
		}
		// ์™ผ์ชฝ์œผ๋กœ ๋ฐ”๊พธ๊ธฐ
		else if (c == 'L') {
			// ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊ฐ€๊ณ  ์žˆ์œผ๋ฉด ์œ„์ชฝ์œผ๋กœ
			if (dx == 1 && dy == 0) {
				dx = 0;
				dy = -1;
			}
			// ์•„๋ž˜์ชฝ์œผ๋กœ ๊ฐ€๊ณ  ์žˆ์œผ๋ฉด ์˜ค๋ฅธ์ชฝ์œผ๋กœ
			else if (dx == 0 && dy == 1) {
				dx = 1;
				dy = 0;
			}
			// ์™ผ์ชฝ์œผ๋กœ ๊ฐ€๊ณ  ์žˆ์œผ๋ฉด ์•„๋ž˜์ชฝ์œผ๋กœ
			else if (dx == -1 && dy == 0) {
				dx = 0;
				dy = 1;
			}
			// ์œ„์ชฝ์œผ๋กœ ๊ฐ€๊ณ  ์žˆ์œผ๋ฉด ์™ผ์ชฝ์œผ๋กœ
			else if (dx == 0 && dy == -1) {
				dx = -1;
				dy = 0;
			}
		}
	}
}

๐Ÿค” ๋‚˜์˜ ์ƒ๊ฐ

์—ฌ๊ธฐ์„œ deque๋ฅผ ํ™œ์šฉํ•œ ์ด์œ ๋Š” ์‚ฌ๊ณผ๊ฐ€ ์žˆ์œผ๋ฉด ํ•˜๋‚˜์˜ node๋งŒ ์ถ”๊ฐ€ํ•˜๋ฉด ๋˜์ง€๋งŒ ์‚ฌ๊ณผ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๋Š” ๋งˆ์ง€๋ง‰ node๋ฅผ ์‚ญ์ œํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•ž ๋’ค๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฝ์ž…, ์‚ญ์ œ ํ•  ์ˆ˜ ์žˆ๋Š” deque๋ฅผ ํ™œ์šฉํ–ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  Node ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด์„œ ์ขŒํ‘œ๋ฅผ ๋ฐ›์•„์˜จ๋‹ค.

  • ๋ฐฉํ–ฅ์„ ์ •ํ•˜๊ณ  ํ•œ ์นธ์”ฉ ์ด๋™ํ•˜๋ฉด deque์˜ ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค.
  • ์‚ฌ๊ณผ๊ฐ€ ์žˆ์œผ๋ฉด ๊ทธ๋Œ€๋กœ ํ•˜๋‚˜์˜ node๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
  • ์‚ฌ๊ณผ๊ฐ€ ์—†์œผ๋ฉด ํ•˜๋‚˜์˜ node๋Š” ์ถ”๊ฐ€ํ•˜์ง€๋งŒ deque์— ์ €์žฅ๋˜์–ด์žˆ๋Š” ๋งˆ์ง€๋ง‰ node๋Š” ์‚ญ์ œํ•œ๋‹ค.
  • ์ด ๊ณผ์ •๋“ค์„ ๋ฐ˜๋ณตํ•˜๋ฉฐ ๊ธฐ์กด deque์— ์žˆ๋Š” node๊ฐ’์— ๋„๋‹ฌํ•˜๊ฑฐ๋‚˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด ๋ !
  • ์ด ํšŸ์ˆ˜๋ฅผ ์นด์šดํŒ…ํ•ด์ค€๋‹ค.


ํƒœ๊ทธ: , , ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: