[Algorithm] ๐Ÿ๋ฐฑ์ค€ 3190 ๋ฑ€

HaJingJingยท2021๋…„ 9์›” 2์ผ
0

Algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
114/119

0. ๋ฌธ์ œ

'Dummy' ๋ผ๋Š” ๋„์Šค๊ฒŒ์ž„์ด ์žˆ๋‹ค. ์ด ๊ฒŒ์ž„์—๋Š” ๋ฑ€์ด ๋‚˜์™€์„œ ๊ธฐ์–ด๋‹ค๋‹ˆ๋Š”๋ฐ, ์‚ฌ๊ณผ๋ฅผ ๋จน์œผ๋ฉด ๋ฑ€ ๊ธธ์ด๊ฐ€ ๋Š˜์–ด๋‚œ๋‹ค. ๋ฑ€์ด ์ด๋ฆฌ์ €๋ฆฌ ๊ธฐ์–ด๋‹ค๋‹ˆ๋‹ค๊ฐ€ ๋ฒฝ ๋˜๋Š” ์ž๊ธฐ์ž์‹ ์˜ ๋ชธ๊ณผ ๋ถ€๋”ชํžˆ๋ฉด ๊ฒŒ์ž„์ด ๋๋‚œ๋‹ค.

๊ฒŒ์ž„์€ NxN ์ •์‚ฌ๊ฐ ๋ณด๋“œ์œ„์—์„œ ์ง„ํ–‰๋˜๊ณ , ๋ช‡๋ช‡ ์นธ์—๋Š” ์‚ฌ๊ณผ๊ฐ€ ๋†“์—ฌ์ ธ ์žˆ๋‹ค. ๋ณด๋“œ์˜ ์ƒํ•˜์ขŒ์šฐ ๋์— ๋ฒฝ์ด ์žˆ๋‹ค. ๊ฒŒ์ž„์ด ์‹œ์ž‘ํ• ๋•Œ ๋ฑ€์€ ๋งจ์œ„ ๋งจ์ขŒ์ธก์— ์œ„์น˜ํ•˜๊ณ  ๋ฑ€์˜ ๊ธธ์ด๋Š” 1 ์ด๋‹ค. ๋ฑ€์€ ์ฒ˜์Œ์— ์˜ค๋ฅธ์ชฝ์„ ํ–ฅํ•œ๋‹ค.

๋ฑ€์€ ๋งค ์ดˆ๋งˆ๋‹ค ์ด๋™์„ ํ•˜๋Š”๋ฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทœ์น™์„ ๋”ฐ๋ฅธ๋‹ค.

  • ๋จผ์ € ๋ฑ€์€ ๋ชธ๊ธธ์ด๋ฅผ ๋Š˜๋ คย ๋จธ๋ฆฌ๋ฅผย ๋‹ค์Œ์นธ์— ์œ„์น˜์‹œํ‚จ๋‹ค.
  • ๋งŒ์•ฝ ์ด๋™ํ•œ ์นธ์— ์‚ฌ๊ณผ๊ฐ€ ์žˆ๋‹ค๋ฉด, ๊ทธ ์นธ์— ์žˆ๋˜ ์‚ฌ๊ณผ๊ฐ€ ์—†์–ด์ง€๊ณ  ๊ผฌ๋ฆฌ๋Š” ์›€์ง์ด์ง€ ์•Š๋Š”๋‹ค.
  • ๋งŒ์•ฝ ์ด๋™ํ•œ ์นธ์— ์‚ฌ๊ณผ๊ฐ€ ์—†๋‹ค๋ฉด, ๋ชธ๊ธธ์ด๋ฅผ ์ค„์—ฌ์„œ ๊ผฌ๋ฆฌ๊ฐ€ ์œ„์น˜ํ•œ ์นธ์„ ๋น„์›Œ์ค€๋‹ค. ์ฆ‰, ๋ชธ๊ธธ์ด๋Š” ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    ์‚ฌ๊ณผ์˜ ์œ„์น˜์™€ ๋ฑ€์˜ ์ด๋™๊ฒฝ๋กœ๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ ์ด ๊ฒŒ์ž„์ด ๋ช‡ ์ดˆ์— ๋๋‚˜๋Š”์ง€ ๊ณ„์‚ฐํ•˜๋ผ.

์ž…๋ ฅ
์ฒซ์งธ ์ค„์— ๋ณด๋“œ์˜ ํฌ๊ธฐ N์ด ์ฃผ์–ด์ง„๋‹ค. (2 โ‰ค N โ‰ค 100) ๋‹ค์Œ ์ค„์— ์‚ฌ๊ณผ์˜ ๊ฐœ์ˆ˜ย K๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (0 โ‰ค K โ‰ค 100)

๋‹ค์Œ K๊ฐœ์˜ ์ค„์—๋Š” ์‚ฌ๊ณผ์˜ ์œ„์น˜๊ฐ€ ์ฃผ์–ด์ง€๋Š”๋ฐ, ์ฒซ ๋ฒˆ์งธ ์ •์ˆ˜๋Š”ย ํ–‰, ๋‘ ๋ฒˆ์งธ ์ •์ˆ˜๋Š”ย ์—ด ์œ„์น˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.ย ์‚ฌ๊ณผ์˜ ์œ„์น˜๋Š” ๋ชจ๋‘ ๋‹ค๋ฅด๋ฉฐ, ๋งจ ์œ„ ๋งจ ์ขŒ์ธก (1ํ–‰ 1์—ด) ์—๋Š” ์‚ฌ๊ณผ๊ฐ€ ์—†๋‹ค.

๋‹ค์Œ ์ค„์—๋Š” ๋ฑ€์˜ ๋ฐฉํ–ฅ ๋ณ€ํ™˜ ํšŸ์ˆ˜ L ์ด ์ฃผ์–ด์ง„๋‹ค. (1 โ‰ค L โ‰ค 100)
๋‹ค์Œ L๊ฐœ์˜ ์ค„์—๋Š” ๋ฑ€์˜ ๋ฐฉํ–ฅ ๋ณ€ํ™˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง€๋Š”๋ฐ, ย ์ •์ˆ˜ X์™€ ๋ฌธ์ž C๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ๊ฒŒ์ž„ ์‹œ์ž‘ ์‹œ๊ฐ„์œผ๋กœ๋ถ€ํ„ฐ X์ดˆ๊ฐ€ ๋๋‚œ ๋’ค์— ์™ผ์ชฝ(C๊ฐ€ 'L') ๋˜๋Š” ์˜ค๋ฅธ์ชฝ(C๊ฐ€ 'D')๋กœ 90๋„ ๋ฐฉํ–ฅ์„ ํšŒ์ „์‹œํ‚จ๋‹ค๋Š” ๋œป์ด๋‹ค. X๋Š” 10,000 ์ดํ•˜์˜ ์–‘์˜ ์ •์ˆ˜์ด๋ฉฐ, ๋ฐฉํ–ฅ ์ „ํ™˜ ์ •๋ณด๋Š” X๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ
์ฒซ์งธ ์ค„์— ๊ฒŒ์ž„์ด ๋ช‡ ์ดˆ์— ๋๋‚˜๋Š”์ง€ ์ถœ๋ ฅํ•œ๋‹ค.

1. ์•„์ด๋””์–ด

๐Ÿ’ก ๋ฑ€์˜ ์œ„์น˜(๋ฑ€์˜ ๋จธ๋ฆฌ๋ถ€ํ„ฐ ๊ผฌ๋ฆฌ๊นŒ์ง€์˜ ์œ„์น˜)๋ฅผ ์•Œ๋ ค์ค„ queue๋ฅผ ํ• ๋‹น
๐Ÿ’ก rotateํ•˜๋Š” ์‹œ๊ฐ„์ด ๋˜๋ฉด ๋ฏธ๋ฆฌ ์„ ์–ธํ•ด๋†“์€ d(๋ฐฉํ–ฅ) ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ๋ฑ€์˜ ์œ„์น˜๋ฅผ ์กฐ์ •
๐Ÿ’ก n์ดˆ๊ฐ€ ์ง€๋‚œํ›„, rotateํ•˜๋ ค๋ฉด D๋Š” idx+1๋ฅผ ํ†ตํ•ด d๋ฅผ ์กฐ์ •ํ•˜๊ณ , L์€ idx-1์„ ํ†ตํ•ด ์กฐ์ •ํ•จ
( ์ˆœ์„œ๋Š” ์˜ค๋ฅธ์ชฝ ์•„๋ž˜ ์™ผ์ชฝ ์œ„๋กœ ์ €์žฅ๋˜์–ด ์žˆ๊ณ  D๊ฐ€ ๋‚˜์˜ค๋ฉด ๊ทธ๋Œ€๋กœ ๋Œ๊ณ , L์ด ๋‚˜์˜ค๋ฉด ๋ฐ˜๋Œ€๋กœ ๋Œ๋ฉด ๋จ )
๐Ÿ’ก ๋ฑ€์˜ ๋จธ๋ฆฌ๊ฐ€ ๊ฐˆ ์นธ์˜ ์œ„์น˜ nx, ny๋ฅผ ์—…๋ฐ์ดํŠธํ•จ
๐Ÿ’ก ๋ฒฝ์— ๋ถ€๋”ชํžˆ๊ฑฐ๋‚˜ ์ž์‹ ์˜ ๋ชธ๊ณผ ๋งž๋‹ฟ์œผ๋ฉด while๋ฌธ break ํ•จ
( map์—์„œ 1์€ ์‚ฌ๊ณผ ์œ„์น˜, -1์€ ๋ฑ€์˜ ์œ„์น˜, 0์€ ์•„๋ฌด๊ฒƒ๋„ ์—†์Œ์„ ๋‚˜ํƒ€๋ƒ„ )
๐Ÿ’ก tmp์— nx, ny ์นธ์˜ ๊ฐ’์„ ๋ฐ›์•„์˜จ ํ›„, ๋ฑ€์˜ ๋จธ๋ฆฌ์นธ์„ ํ์— ๋„ฃ๊ณ  map๋„ -1์„ ํ•ด์คŒ
๐Ÿ’ก tmp๊ฐ€ 1์ด ์•„๋‹ˆ๋ฉด, ์‚ฌ๊ณผ๊ฐ€ ์—†๋Š” ์นธ์œผ๋กœ ๋ฑ€์˜ ๊ผฌ๋ฆฌ๊ฐ€ ์žˆ๋Š” ์นธ์„ ์ผ๋ฐ˜ ์นธ์œผ๋กœ ๋งŒ๋“ค์–ด์คŒ
( snake ํ์— ๊ฐ€์žฅ ์ฒ˜์Œ์— ์žˆ๋Š” ๊ฒƒ์ด ๋ฑ€์˜ ๊ผฌ๋ฆฌ๊ฐ€ ์žˆ๋Š” ์นธ์ž„ / ์ด๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  map ์œ„์น˜์— 0์„ ๋„ฃ์–ด์คŒ )
๐Ÿ’ก ์‹œ๊ฐ„์„ ++ ํ•ด์คŒ

2. ํ•ต์‹ฌ ํ’€์ด

  1. ๋ฑ€์˜ ์œ„์น˜(๋ฑ€์˜ ๋จธ๋ฆฌ๋ถ€ํ„ฐ ๊ผฌ๋ฆฌ๊นŒ์ง€์˜ ์œ„์น˜)๋ฅผ ์•Œ๋ ค์ค„ queue๋ฅผ ํ• ๋‹น
Queue<Node> snake = new LinkedList<>();
  1. rotateํ•˜๋Š” ์‹œ๊ฐ„์ด ๋˜๋ฉด ๋ฏธ๋ฆฌ ์„ ์–ธํ•ด๋†“์€ d(๋ฐฉํ–ฅ) ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ๋ฑ€์˜ ์œ„์น˜๋ฅผ ์กฐ์ •
static int[] dx = {0,1,0,-1};
static int[] dy = {1,0,-1,0};
...
int d = 0;
...
  1. n์ดˆ๊ฐ€ ์ง€๋‚œํ›„, rotateํ•˜๋ ค๋ฉด D๋Š” idx+1๋ฅผ ํ†ตํ•ด d๋ฅผ ์กฐ์ •ํ•˜๊ณ , L์€ idx-1์„ ํ†ตํ•ด ์กฐ์ •ํ•จ
if(idx < r.length) {
	if(sec-1 == r[idx].x) {
		if(r[idx].c == 'L') {
			if(d == 0) d = 3;
			else d--;
		} else {
			d = (d+1)%4;
		}
		idx++;
	}
}
  1. ๋ฑ€์˜ ๋จธ๋ฆฌ๊ฐ€ ๊ฐˆ ์นธ์˜ ์œ„์น˜ nx, ny๋ฅผ ์—…๋ฐ์ดํŠธํ•จ
nx = nx + dx[d];
ny = ny + dy[d];
  1. ๋ฒฝ์— ๋ถ€๋”ชํžˆ๊ฑฐ๋‚˜ ์ž์‹ ์˜ ๋ชธ๊ณผ ๋งž๋‹ฟ์œผ๋ฉด while๋ฌธ break ํ•จ
if(nx < 1 || nx >= n+1 || ny < 1 || ny >= n+1 || map[nx][ny] == -1) 
	break;
  1. tmp์— nx, ny ์นธ์˜ ๊ฐ’์„ ๋ฐ›์•„์˜จ ํ›„, ๋ฑ€์˜ ๋จธ๋ฆฌ์นธ์„ ํ์— ๋„ฃ๊ณ  map๋„ -1์„ ํ•ด์คŒ
int tmp = map[nx][ny];
map[nx][ny] = -1;
snake.add(new Node(nx,ny));
  1. tmp๊ฐ€ 1์ด ์•„๋‹ˆ๋ฉด, ์‚ฌ๊ณผ๊ฐ€ ์—†๋Š” ์นธ์œผ๋กœ ๋ฑ€์˜ ๊ผฌ๋ฆฌ๊ฐ€ ์žˆ๋Š” ์นธ์„ ์ผ๋ฐ˜ ์นธ์œผ๋กœ ๋งŒ๋“ค์–ด์คŒ
if(tmp != 1) {
	Node tmp2 = snake.poll();
	map[tmp2.x][tmp2.y] = 0;
}
  1. ์‹œ๊ฐ„์„ ++ ํ•ด์คŒ
sec++;

3. ์ฝ”๋“œ

import java.io.*;
import java.util.*;
public class BOJ_3190 {
	static int n, k;
	static int[][] map;
	static Rotate[] r;
	static int[] dx = {0,1,0,-1};
	static int[] dy = {1,0,-1,0};
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		n = Integer.parseInt(br.readLine());
		k = Integer.parseInt(br.readLine());
		map = new int[n+1][n+1];
		
		for(int i=0; i<k; i++) {
			String[] s = br.readLine().split(" ");
			map[Integer.parseInt(s[0])][Integer.parseInt(s[1])] = 1;
		}
		
		r = new Rotate[Integer.parseInt(br.readLine())];
		for(int i=0; i<r.length; i++) {
			String[] s = br.readLine().split(" ");
			r[i] = new Rotate(Integer.parseInt(s[0]), s[1].charAt(0));
		}
		
		dummy();
	}
	
	static void dummy() {
		Queue<Node> snake = new LinkedList<>();
		
		snake.add(new Node(1,1));
		map[1][1] = -1;
		int sec = 1;
		int d = 0;
		int idx = 0;
		int nx = 1, ny = 1;
		
		while(true) {
			if(idx < r.length) {
				if(sec-1 == r[idx].x) {
					if(r[idx].c == 'L') {
						if(d == 0) d = 3;
						else d--;
					} else {
						d = (d+1)%4;
					}
					idx++;
				}
			}
			
			nx = nx + dx[d];
			ny = ny + dy[d];
			
			if(nx < 1 || nx >= n+1 || ny < 1 || ny >= n+1 || map[nx][ny] == -1) break;
			
			int tmp = map[nx][ny];
			map[nx][ny] = -1;
			snake.add(new Node(nx,ny));
			
			if(tmp != 1) {
				Node tmp2 = snake.poll();
				map[tmp2.x][tmp2.y] = 0;
			}
			
			sec++;
		}
		
		System.out.println(sec);
		
	}
	
	static class Node{
		int x;
		int y;
		Node(int x, int y){
			this.x = x;
			this.y = y;
		}
	}
	
	static class Rotate{
		int x;
		char c;
		Rotate(int x, char c){
			this.x = x;
			this.c = c;
		}
	}

}

4. ๊ฒฐ๊ณผ

์„ฑ๊ณตโœจ

profile
๐ŸŒฑ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž๐ŸŒฑ

0๊ฐœ์˜ ๋Œ“๊ธ€