๐Ÿ”‘ Problem Solving/๐ŸŒณ CodeTree

[JAVA] CodeTree ์‹ธ์›€ ๋•…

snowball๐Ÿฐ 2023. 4. 7. 11:40

https://www.codetree.ai/training-field/frequent-problems/battle-ground/description?page=3&pageSize=20&username= 

 

์ฝ”๋“œํŠธ๋ฆฌ | ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์ค€๋น„๋ฅผ ์œ„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ •์„

๊ตญ๊ฐ€๋Œ€ํ‘œ๊ฐ€ ๋งŒ๋“  ์ฝ”๋”ฉ ๊ณต๋ถ€์˜ ๊ฐ€์ด๋“œ๋ถ ์ฝ”๋”ฉ ์™•์ดˆ๋ณด๋ถ€ํ„ฐ ๊ฟˆ์˜ ์ง์žฅ ์ฝ”ํ…Œ ํ•ฉ๊ฒฉ๊นŒ์ง€, ๊ตญ๊ฐ€๋Œ€ํ‘œ๊ฐ€ ์—„์„ ํ•œ ์ปค๋ฆฌํ˜๋Ÿผ์œผ๋กœ ์ค€๋น„ํ•ด๋ณด์„ธ์š”.

www.codetree.ai

๐Ÿ’ก ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ฌธ์ œ์ด๋‹ค. BFS, DFS ๋“ฑ์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
1. ์—ฌ๋Ÿฌ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๊ฒƒ์ด๋‹ค.
2. ์‚ฌ๋žŒ, ์ด, ํ˜„์žฌ ์œ„์น˜์— ์žˆ๋Š” ์‚ฌ๋žŒ์˜ ๋ฒˆํ˜ธ ์„ธ๊ฐ€์ง€๋ฅผ ๋ชจ๋‘ ๋”ฐ๋กœ ์ €์žฅํ•ด๋‘์—ˆ์œผ๋ฏ€๋กœ ์ •๋ณด๊ฐ€ ๋ฐ”๋€”๋•Œ
๋ชจ๋‘๋ฅผ ๊ฐฑ์‹ ์‹œ์ผœ์•ผ ํ•œ๋‹ค!
3. ๋ฌธ์ œ ์„ค๋ช…์ด ์กฐ๊ธˆ ํ—ท๊ฐˆ๋ฆด ์ˆ˜ ์žˆ๋Š”๋ฐ 1๋ฒˆ์ด ์ด๋™ํ•˜์—ฌ 2๋ฒˆ๊ณผ ๋Œ€๊ฒฐํ•œ ๋’ค 2๋ฒˆ์ด ์ ธ์„œ ๋‹ค๋ฅธ ์œ„์น˜๋กœ ์ด๋™ํ•˜์—ฌ๋„
๋ฐ”๋กœ 2๋ฒˆ์€ ์ž์‹ ์˜ ์ฐจ๋ก€์— ์ด๋™์„ ์ง„ํ–‰ ํ•ด์•ผํ•œ๋‹ค.

์ „์ฒด ์ฝ”๋“œ

import java.util.*;
import java.io.*;

public class Main {
	static int N, M, K;
	static ArrayList<Integer>[][] gun; // ํ•ด๋‹น ์œ„์น˜์˜ ์ด ์ •๋ณด. ์—†์œผ๋ฉด size๊ฐ€ 0
	static int[][] people; // ํ•ด๋‹น ์œ„์น˜์˜ ์‚ฌ๋žŒ ์ •๋ณด (person์˜ number๋ฅผ ์ €์žฅํ•จ)
	static class person{
		int number; // ๋ฒˆํ˜ธ
		int power; // ์ดˆ๊ธฐ ๋Šฅ๋ ฅ์น˜
		int gun; // ๊ฐ€์ง„ ์ด์˜ ๊ณต๊ฒฉ๋ ฅ 0์ด๋ฉด ์ด์ด ์—†๋‹ค.
		int d; // ๋ฐฉํ–ฅ
		int x; int y;
		public person(int number, int x, int y, int d, int power) {
			super();
			this.number = number;
			this.power = power;
			this.d = d;
			this.x = x;
			this.y = y;
		}
	}
	static ArrayDeque<person> p;
	static int[] dx = {-1, 0, 1, 0}, dy = {0, 1, 0, -1};
	static int[] score;
    public static void main(String args[]) throws Exception{
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st = new StringTokenizer(bf.readLine(), " ");
        N = Integer.parseInt(st.nextToken()); //๊ฒฉ์ž ํฌ๊ธฐ
        M = Integer.parseInt(st.nextToken()); //ํ”Œ๋ ˆ์ด์–ด์ˆ˜
        K = Integer.parseInt(st.nextToken()); //๋ผ์šด๋“œ ์ˆ˜
        score = new int[M+1]; // score[1] = 1๋ฒˆ ํ”Œ๋ ˆ์ด์–ด์˜ ์ ์ˆ˜
        gun = new ArrayList[N][N];
        people = new int[N][N];
        for(int i=0; i<N; i++)
        	for(int j=0; j<N; j++)
        		gun[i][j] = new ArrayList<>();
        
        for(int i=0; i<N; i++) {
        	st = new StringTokenizer(bf.readLine(), " ");
        	for(int j=0; j<N; j++) {
        		int g = Integer.parseInt(st.nextToken());
        		if(g != 0)
        			gun[i][j].add(g);
        	}
        }
        p = new ArrayDeque<>();
        
        for(int i=1; i<=M; i++) {
        	st = new StringTokenizer(bf.readLine(), " ");
        	int x = Integer.parseInt(st.nextToken())-1;
        	int y = Integer.parseInt(st.nextToken())-1;
        	int d = Integer.parseInt(st.nextToken());
        	int s = Integer.parseInt(st.nextToken());
        	people[x][y] = i;
        	p.offer(new person(i, x, y, d, s));
        }
        int time = 0;
        while(++time <= K) {
        	move_people();
        }
        for(int i=1; i<=M; i++)
        	sb.append(score[i]).append(" ");
        
        System.out.println(sb);
    }
    static void move_people() {
    	int cnt = 0;
    	while(++cnt <= M) {
    		person player = p.poll();
    		int nx = player.x+dx[player.d];
    		int ny = player.y+dy[player.d];
    		if(nx < 0 || ny < 0 || nx >= N || ny >= N) {
    			player.d += 2;
    			player.d %= 4;
    			nx = player.x+dx[player.d];
        		ny = player.y+dy[player.d];
    		}
    		if(people[nx][ny] == 0) { // ํ•ด๋‹น ์œ„์น˜์— ์‚ฌ๋žŒ์ด ์—†๋Š” ๊ฒฝ์šฐ
    			if(gun[nx][ny].size() != 0) { // ํ•ด๋‹น ์œ„์น˜์— ์ด์ด ์žˆ๋Š” ๊ฒฝ์šฐ
    				int max = player.gun; int max_idx = -1;
    				for(int i=0; i<gun[nx][ny].size(); i++) {
    					int g = gun[nx][ny].get(i);
    					if(max < g) {
    						max = g; max_idx = i;
    					}
    				}
    				if(max_idx != -1) { // ์ด ๋ณ€๊ฒฝ
    					gun[nx][ny].remove(max_idx);
    					if(player.gun != 0) gun[nx][ny].add(player.gun);
    					player.gun = max;
    				}
    			}
    			people[player.x][player.y] = 0; // ์ด๋™ ์ „ ์œ„์น˜ ํ”์  ์ง€์šฐ๊ธฐ
    			people[nx][ny] = player.number; // ์ด๋™ํ•˜๊ธฐ
    			player.x = nx;
    			player.y = ny; // ์ขŒํ‘œ ๋ณ€๊ฒฝ
    			p.offer(player);
    		}
    		else { // ์žˆ๋Š” ๊ฒฝ์šฐ
    			int vs = people[nx][ny]; // ๋Œ€๊ฒฐ ์ƒ๋Œ€์˜ number
    			people[player.x][player.y] = 0; // ์ด๋ฏธ ์ด๋™ํ–ˆ์œผ๋ฏ€๋กœ ์ง์ „ ์œ„์น˜ ํ”์  ์ง€์›€
    			player.x = nx;
    			player.y = ny; //์ด๋ฏธ ์ด๋™ํ–ˆ์œผ๋ฏ€๋กœ player ์ขŒํ‘œ ๊ฐ’ ์ˆ˜์ •
    			fire(vs, player);
    		}
    	}
    }
    static void fire(int vs, person now) {
    	int cnt = 0;
    	while(++cnt < M) { // ํ˜„์žฌ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ž ๊น ๋‚˜์™€์žˆ์œผ๋ฏ€๋กœ M-1๋ฒˆ ์ง„ํ–‰
    		person v = p.poll();
    		if(v.number != vs) p.offer(v); // ๋Œ€๊ฒฐ์ƒ๋Œ€๊ฐ€ ์•„๋‹ˆ๋ฉด ๋‹ค์‹œ ๋„ฃ์–ด์ฃผ๊ธฐ
    		else {
    			if(v.power + v.gun < now.power + now.gun || (v.power + v.gun == now.power + now.gun && v.power < now.power)) {
    				// v๊ฐ€ ์กŒ์Œ
    				score[now.number] += (now.power + now.gun) - (v.power + v.gun); // ์ ์ˆ˜ ์ฆ๊ฐ€์‹œํ‚ค๊ธฐ
    				people[v.x][v.y] = now.number; // ํ•ด๋‹น ์œ„์น˜์—๋Š” now๊ฐ€ ๋‚จ์Œ
    				
    				if(now.gun < v.gun) { // v๊ฐ€ ํ•ด๋‹น ๊ฒฉ์ž์—์„œ ๊ฐ€์žฅ ํฐ ์ด์„ ๊ฐ€์ง€๊ณ  ์žˆ์„ ๊ฒƒ์ด๋ฏ€๋กœ vํ•˜๊ณ ๋งŒ ๋น„๊ตํ•˜๊ธฐ
    					if(now.gun != 0) gun[now.x][now.y].add(now.gun);
    					now.gun = v.gun;
    				}
    				else
    					if(v.gun != 0)
    						gun[v.x][v.y].add(v.gun); // v๊ฐ€ ์ด์„ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ๋‹ค๋ฉด ์ด์„ ๋‚ด๋ ค๋†“๊ธฐ
    				
    				v.gun = 0;
    				for(int d=0; d<4; d++) {
    					int nx = v.x + dx[(v.d + d) % 4];
    					int ny = v.y + dy[(v.d + d) % 4];
    					if(nx < 0 || ny < 0 || nx >= N || ny >= N || people[nx][ny] != 0) continue; // ๊ฒฉ์ž์—์„œ ๋ฒ—์–ด๋‚˜๊ฑฐ๋‚˜ ์‚ฌ๋žŒ์ด ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ๋‹ค๋ฅธ ๊ฒฉ์ž ์ฐพ๊ธฐ
    					people[nx][ny] = v.number;
    					v.x = nx; v.y = ny;
    					v.d = (v.d + d) % 4; // ๋ฐฉํ–ฅ์ด ๋ฐ”๋€Œ์—ˆ์œผ๋ฏ€๋กœ ์ขŒํ‘œ์™€ ์ด๋™ ๋ฐฉํ–ฅ ๊ฐฑ์‹ 
    					break;
    				}
    				
    				int max = 0; int max_idx = -1;
    				for(int i=0; i<gun[v.x][v.y].size(); i++) {
    					int g = gun[v.x][v.y].get(i);
    					if(max < g) {
    						max = g; max_idx = i;
    					}
    				}
    				if(max_idx != -1) {
    					gun[v.x][v.y].remove(max_idx);
    					v.gun = max;
    				}
    				p.offer(v); // v์˜ ๋ชจ๋“  ์ •๋ณด๊ฐ€ ๊ฐฑ์‹ ๋˜์—ˆ์œผ๋ฏ€๋กœ queue์— ๋„ฃ๋Š”๋‹ค.
    			}
    			else {
    				// v๊ฐ€ ์ด๊ฒผ์Œ
    				score[v.number] += (v.power + v.gun) - (now.power + now.gun);
    				
    				// v๋Š” ์ด๋ฏธ ์นธ์˜ ๊ฐ€์žฅ ๊ณต๊ฒฉ๋ ฅ์ด ๋†’์€ ์ด์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ง„ ํ”Œ๋ ˆ์ด์–ด์˜ ์ด๋งŒ ๋น„๊ต
    				if(now.gun > v.gun) {
    					if(v.gun != 0) gun[v.x][v.y].add(v.gun);
    					v.gun = now.gun;
    				}
    				else if(now.gun != 0) 
    					gun[v.x][v.y].add(now.gun); // ์ง„ ํ”Œ๋ ˆ์ด์–ด ์ด ๋‚ด๋ ค๋†“์Œ
    				now.gun = 0;
    				p.offer(v); // v๋Š” ์ด์˜ ์ •๋ณด๋ฅผ ์ œ์™ธํ•˜๊ณ  ๊ฐฑ์‹ ํ•  ๊ฒƒ์ด ์—†์œผ๋ฏ€๋กœ queue์— ๋„ฃ์–ด์ค€๋‹ค.
    				
    				for(int d=0; d<4; d++) {
    					int nx = now.x + dx[(now.d + d) % 4];
    					int ny = now.y + dy[(now.d + d) % 4];
    					if(nx < 0 || ny < 0 || nx >= N || ny >= N || people[nx][ny] != 0) continue;
    					people[nx][ny] = now.number;
    					now.x = nx; now.y = ny;
    					now.d = (now.d + d) % 4;
    					break;
    				}
    				int max = 0; int max_idx = -1;
    				for(int i=0; i<gun[now.x][now.y].size(); i++) {
    					int g = gun[now.x][now.y].get(i);
    					if(max < g) {
    						max = g; max_idx = i;
    					}
    				}
    				if(max_idx != -1) {
    					gun[now.x][now.y].remove(max_idx);
    					now.gun = max;
    				}
    			}
    		}
    	}
    	p.offer(now); // ๋งˆ์ง€๋ง‰์— ๋„ฃ์–ด์ฃผ์–ด์•ผ ์›ํ•˜๋Š” ์ˆœ์„œ ์œ ์ง€
    }
}

ํ•œ ์ค„ ์”ฉ ์‚ดํŽด๋ณด์ž

static int N, M, K;
static ArrayList<Integer>[][] gun; // ํ•ด๋‹น ์œ„์น˜์˜ ์ด ์ •๋ณด. ์—†์œผ๋ฉด size๊ฐ€ 0
static int[][] people; // ํ•ด๋‹น ์œ„์น˜์˜ ์‚ฌ๋žŒ ์ •๋ณด (person์˜ number๋ฅผ ์ €์žฅํ•จ)
static class person{
	int number; // ๋ฒˆํ˜ธ
	int power; // ์ดˆ๊ธฐ ๋Šฅ๋ ฅ์น˜
	int gun; // ๊ฐ€์ง„ ์ด์˜ ๊ณต๊ฒฉ๋ ฅ 0์ด๋ฉด ์ด์ด ์—†๋‹ค.
	int d; // ๋ฐฉํ–ฅ
	int x; int y;
	public person(int number, int x, int y, int d, int power) {
		super();
		this.number = number;
		this.power = power;
		this.d = d;
		this.x = x;
		this.y = y;
	}
}
static ArrayDeque<person> p;
static int[] dx = {-1, 0, 1, 0}, dy = {0, 1, 0, -1};
static int[] score;

์‚ฌ๋žŒ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์—ˆ๊ณ , ์‚ฌ๋žŒ ๊ฐ์ฒด๋ฅผ ๊ด€๋ฆฌํ•  ArrayDeque์„ ์„ ์–ธํ•˜์˜€๋‹ค. ์ด๋•Œ deque์€ person num ์ˆœ์„œ๋Œ€๋กœ๋ฅผ ์œ ์ง€ํ•˜๋„๋ก ํ•˜์˜€๋‹ค.

์ด์ฐจ์› ๋ฐฐ์—ด people์„ ํ†ตํ•ด ํ˜„์žฌ ์œ„์น˜ํ•œ ์‚ฌ๋žŒ์˜ ๋ฒˆํ˜ธ๋ฅผ ์ €์žฅํ•˜์˜€๋‹ค. ํ˜„์žฌ ์œ„์น˜์— ์‚ฌ๋žŒ์ด ์žˆ๋Š”์ง€ ๋น ๋ฅด๊ฒŒ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

static void move_people() {
	int cnt = 0;
	while(++cnt <= M) {
		person player = p.poll();
		int nx = player.x+dx[player.d];
		int ny = player.y+dy[player.d];
		if(nx < 0 || ny < 0 || nx >= N || ny >= N) {
			player.d += 2;
			player.d %= 4;
			nx = player.x+dx[player.d];
    		ny = player.y+dy[player.d];
		}
		if(people[nx][ny] == 0) { // ํ•ด๋‹น ์œ„์น˜์— ์‚ฌ๋žŒ์ด ์—†๋Š” ๊ฒฝ์šฐ
			if(gun[nx][ny].size() != 0) { // ํ•ด๋‹น ์œ„์น˜์— ์ด์ด ์žˆ๋Š” ๊ฒฝ์šฐ
				int max = player.gun; int max_idx = -1;
				for(int i=0; i<gun[nx][ny].size(); i++) {
					int g = gun[nx][ny].get(i);
					if(max < g) {
						max = g; max_idx = i;
					}
				}
				if(max_idx != -1) { // ์ด ๋ณ€๊ฒฝ
					gun[nx][ny].remove(max_idx);
					if(player.gun != 0) gun[nx][ny].add(player.gun);
					player.gun = max;
				}
			}
			people[player.x][player.y] = 0; // ์ด๋™ ์ „ ์œ„์น˜ ํ”์  ์ง€์šฐ๊ธฐ
			people[nx][ny] = player.number; // ์ด๋™ํ•˜๊ธฐ
			player.x = nx;
			player.y = ny; // ์ขŒํ‘œ ๋ณ€๊ฒฝ
			p.offer(player);
		}
		else { // ์žˆ๋Š” ๊ฒฝ์šฐ
			int vs = people[nx][ny]; // ๋Œ€๊ฒฐ ์ƒ๋Œ€์˜ number
			people[player.x][player.y] = 0; // ์ด๋ฏธ ์ด๋™ํ–ˆ์œผ๋ฏ€๋กœ ์ง์ „ ์œ„์น˜ ํ”์  ์ง€์›€
			player.x = nx;
			player.y = ny; //์ด๋ฏธ ์ด๋™ํ–ˆ์œผ๋ฏ€๋กœ player ์ขŒํ‘œ ๊ฐ’ ์ˆ˜์ •
			fire(vs, player);
		}
	}
}

move_people()์„ ํ†ตํ•ด ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์„ ์กฐ๊ฑด์— ๋งž๊ฒŒ ์ด๋™์‹œ์ผฐ๋‹ค.

M๋ช…์ด ์ด๋™ํ•˜๋ฏ€๋กœ ํšŸ์ˆ˜๋Š” M๋ฒˆ์ด ๋œ๋‹ค.

people์ด 0์ด๋ฉด ์ด๋™ ์œ„์น˜์— ์‚ฌ๋žŒ์ด ์—†๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ ํ•ด๋‹น ์œ„์น˜์—์„œ ์ด์„ ๊ฐฑ์‹ ํ•œ๋‹ค.

์ด ์ด๋™์„ ํ†ตํ•ด person์˜ x, y, (d), gun์ด ๊ฐฑ์‹ ๋จ์„ ์œ ์˜ํ•˜์ž! ๋˜ํ•œ person์˜ ์œ„์น˜๊ฐ€ ๊ฐฑ์‹ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด์ฐจ์› ๋ฐฐ์—ด people์˜ ์ •๋ณด๋„ ๊ฐฑ์‹ ํ•ด์•ผ ํ•œ๋‹ค.

ํ•ด๋‹น ์œ„์น˜์—์„œ ์ด์˜ ์ •๋ณด๋ฅผ ๊ฐฑ์‹ ์‹œํ‚ฌ ๋•Œ max์˜ ๊ฐ’์„ player.gun์œผ๋กœ ์ฃผ์ง€์•Š๊ณ  0์œผ๋กœ ์ฃผ๊ฒŒ ๋˜๋ฉด player๊ฐ€ ๊ณต๊ฒฉ๋ ฅ์ด ๋” ํฐ ์ด์„ ๊ฐ€์ง€๊ณ  ์žˆ๋”๋ผ๋„ ํ•ด๋‹น ์œ„์น˜์—์„œ ๊ฐ€์žฅ ํฐ ๊ณต๊ฒฉ๋ ฅ์„ ๊ฐ€์ง„ ์ด์œผ๋กœ ๋ฐ”๋€Œ๊ฒŒ ๋œ๋‹ค. → ์ฃผ์˜

๋งŒ์•ฝ ์ด๋™ ์œ„์น˜์— ์‚ฌ๋žŒ์ด ์žˆ๋‹ค๋ฉด ํ•ด๋‹น player์˜ ์ •๋ณด๋ฅผ ๊ฐฑ์‹ ํ•˜๊ณ  fireํ•จ์ˆ˜๋กœ ์ฒ˜๋ฆฌํ•˜์˜€๋‹ค.

static void fire(int vs, person now) {
	int cnt = 0;
	while(++cnt < M) { // ํ˜„์žฌ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ž ๊น ๋‚˜์™€์žˆ์œผ๋ฏ€๋กœ M-1๋ฒˆ ์ง„ํ–‰
		person v = p.poll();
		if(v.number != vs) p.offer(v); // ๋Œ€๊ฒฐ์ƒ๋Œ€๊ฐ€ ์•„๋‹ˆ๋ฉด ๋‹ค์‹œ ๋„ฃ์–ด์ฃผ๊ธฐ
		else {
			if(v.power + v.gun < now.power + now.gun || (v.power + v.gun == now.power + now.gun && v.power < now.power)) {
				// v๊ฐ€ ์กŒ์Œ
				score[now.number] += (now.power + now.gun) - (v.power + v.gun); // ์ ์ˆ˜ ์ฆ๊ฐ€์‹œํ‚ค๊ธฐ
				people[v.x][v.y] = now.number; // ํ•ด๋‹น ์œ„์น˜์—๋Š” now๊ฐ€ ๋‚จ์Œ
				
				if(now.gun < v.gun) { // v๊ฐ€ ํ•ด๋‹น ๊ฒฉ์ž์—์„œ ๊ฐ€์žฅ ํฐ ์ด์„ ๊ฐ€์ง€๊ณ  ์žˆ์„ ๊ฒƒ์ด๋ฏ€๋กœ vํ•˜๊ณ ๋งŒ ๋น„๊ตํ•˜๊ธฐ
					if(now.gun != 0) gun[now.x][now.y].add(now.gun);
					now.gun = v.gun;
				}
				else
					if(v.gun != 0)
						gun[v.x][v.y].add(v.gun); // v๊ฐ€ ์ด์„ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ๋‹ค๋ฉด ์ด์„ ๋‚ด๋ ค๋†“๊ธฐ
				
				v.gun = 0;
				for(int d=0; d<4; d++) {
					int nx = v.x + dx[(v.d + d) % 4];
					int ny = v.y + dy[(v.d + d) % 4];
					if(nx < 0 || ny < 0 || nx >= N || ny >= N || people[nx][ny] != 0) continue; // ๊ฒฉ์ž์—์„œ ๋ฒ—์–ด๋‚˜๊ฑฐ๋‚˜ ์‚ฌ๋žŒ์ด ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ๋‹ค๋ฅธ ๊ฒฉ์ž ์ฐพ๊ธฐ
					people[nx][ny] = v.number;
					v.x = nx; v.y = ny;
					v.d = (v.d + d) % 4; // ๋ฐฉํ–ฅ์ด ๋ฐ”๋€Œ์—ˆ์œผ๋ฏ€๋กœ ์ขŒํ‘œ์™€ ์ด๋™ ๋ฐฉํ–ฅ ๊ฐฑ์‹ 
					break;
				}
				
				int max = 0; int max_idx = -1;
				for(int i=0; i<gun[v.x][v.y].size(); i++) {
					int g = gun[v.x][v.y].get(i);
					if(max < g) {
						max = g; max_idx = i;
					}
				}
				if(max_idx != -1) {
					gun[v.x][v.y].remove(max_idx);
					v.gun = max;
				}
				p.offer(v); // v์˜ ๋ชจ๋“  ์ •๋ณด๊ฐ€ ๊ฐฑ์‹ ๋˜์—ˆ์œผ๋ฏ€๋กœ queue์— ๋„ฃ๋Š”๋‹ค.
			}

์œ„์•„๋ž˜ ๋‚ด์šฉ์€ ๊ฐ™์œผ๋ฏ€๋กœ ์œ„๋งŒ ์„ค๋ช…ํ•˜๊ฒ ๋‹ค.

๋จผ์ € ๋Œ€๊ฒฐ ์ƒ๋Œ€์ธ v๋ฅผ ์ฐพ์•„์ค€๋‹ค. deque์˜ ์ˆœ์„œ ์œ ์ง€๋ฅผ ์œ„ํ•ด ๋บ€ ๋‹ค์Œ ๋ฐ”๋กœ ๋งจ ๋’ค์— ๋„ฃ์–ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

now ์ฆ‰ ํ˜„์žฌ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ด๊ธด๋‹ค๋ฉด ์ ์ˆ˜๋ฅผ ๊ฐฑ์‹ ํ•œ๋‹ค.

๋˜ํ•œ ํ•ด๋‹น ์œ„์น˜์— ์ž”๋ฅ˜ํ•  ํ”Œ๋ ˆ์ด์–ด๋Š” now์ด๋ฏ€๋กœ people๋„ ๊ฐฑ์‹ ํ•œ๋‹ค.

์ด๋•Œ v๋Š” ์ž์‹ ์˜ ์ด์„ ๋‘๊ณ  ๊ฐ€๊ฒŒ ๋œ๋‹ค. v๋Š” ์ด๋ฏธ ํ•ด๋‹น ์นธ์—์„œ ๊ฐฑ์‹ ๋œ ์ด์„ ๋“ค๊ณ  ์žˆ์„ ๊ฒƒ์ด๋ฏ€๋กœ ๊ฐ€์žฅ ํฐ ์ด์„ ๋“ค๊ณ  ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ player๋Š” v์˜ ์ด๋งŒ ๋น„๊ตํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

v๋Š” ์ด์„ ๋‚ด๋ ค๋†จ์œผ๋ฏ€๋กœ v.gun์€ 0์ด ๋˜์–ด์•ผ ํ•œ๋‹ค

๋ฌธ์ œ์—์„œ ์ œ์‹œ๋œ ๋Œ€๋กœ v์˜ ์œ„์น˜๋ฅผ ์˜ฎ๊ธฐ๊ณ  x, y, d, people์„ ๊ฐฑ์‹ ํ•œ๋‹ค.

v๋Š” ์ด๋™ํ•œ ์œ„์น˜์—์„œ ๊ฐ€์žฅ ํฐ ์ด์„ ๋“ค๊ฒŒ ๋œ๋‹ค. move_people์—์„œ์ฒ˜๋Ÿผ ์ด์„ ์ฐพ์•„์ค€๋‹ค. ์ด๋•Œ max๋ฅผ v.gun์œผ๋กœ ์ฃผ์–ด๋„ ๋˜๊ณ  0์œผ๋กœ ์ฃผ์–ด๋„ ๋œ๋‹ค. ์™œ๋ƒํ•˜๋ฉด v๋Š” ์ด์„ ๋“ค๊ณ ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ.

now์˜ ์ŠนํŒจ์— ๊ด€๋ จ์—†์ด now๋Š” ํ•จ์ˆ˜ return ์ง์ „์— deque์— ๋„ฃ์–ด์ฃผ์–ด์•ผ ํ•œ๋‹ค!!! → โญ์ˆœ์„œ์œ ์ง€