[Code Tree] ์ˆ ๋ž˜์žก๊ธฐ(์‚ผ์„ฑ SW ์—ญ๋Ÿ‰ํ…Œ์ŠคํŠธ 2022 ์ƒ๋ฐ˜๊ธฐ ์˜ค์ „ 1๋ฒˆ ๋ฌธ์ œ)

2024. 9. 12. 18:14ยท๐Ÿ’ฏ CodingTest/CodeTree

๋ฌธ์ œ

์ˆ ๋ž˜์žก๊ธฐ

https://www.codetree.ai/training-field/frequent-problems/problems/hide-and-seek/description?page=1&pageSize=20

 

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

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

www.codetree.ai

 


ํ’€์ด

  • ํ•ด๋‹น ํ’€์ด์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์€ ์ˆ ๋ž˜์˜ ์ด๋™์„ ์ œ์–ดํ•˜๋Š” ๊ฒƒ (์ˆœ๋ฐฉํ–ฅ, ์—ญ๋ฐฉํ–ฅ)
  • ๋˜ํ•œ ๋ฐฉํ–ฅ์— ๋Œ€ํ•ด ์ •๋ฆฌ๋ฅผ ํ•ด๋†“๋Š” ๊ฒƒ์„ ์ค‘์ ์œผ๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค.
    • ์ˆœ๋ฐฉํ–ฅ : dxy -> ์ƒ ์šฐ ํ•˜ ์ขŒ (์†Œ์šฉ๋Œ์ด ์ˆœ๋ฐฉํ–ฅ)
    • ์—ญ๋ฐฉํ–ฅ : rdxy -> ํ•˜ ์šฐ ์ƒ ์ขŒ (์†Œ์šฉ๋Œ์ด ์—ญ๋ฐฉํ–ฅ)

์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

class Pair {
	int x;
	int y;
	int d; // ๋ฐฉํ–ฅ ์ƒ์ขŒํ•˜์šฐ -> 0,1,2,3

	public Pair(int x, int y) {
		this.x = x;
		this.y = y;
		this.d = -1;
	}

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

	int getDistance(int x, int y){
		return Math.abs(x - this.x) + Math.abs(y - this.y);
	}
}
public class Main {


	static int N, M, H, K; 
	static int answer;
	static Pair[] thieves;
	static Pair[] trees;
	static Pair tagger;
	static int[][] dir;
	static int[][] dxy = {{-1,0},{0,1},{1,0},{0,-1}};
	static int[][] rdxy = {{1,0},{0,1},{-1,0},{0,-1}};
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());

		N = Integer.parseInt(st.nextToken()); // ๊ฒฉ์ž ํฌ๊ธฐ (๋ฐ˜๋“œ์‹œ ํ™€์ˆ˜)
		M = Integer.parseInt(st.nextToken()); // ๋„๋ง์ž ์ˆ˜
		H = Integer.parseInt(st.nextToken()); // ๋‚˜๋ฌด ์ˆ˜
		K = Integer.parseInt(st.nextToken()); // ์ด ํ„ด ํšŸ์ˆ˜

		thieves = new Pair[M];
		trees = new Pair[H];

		answer = 0;

		// ์ˆ ๋ž˜๋Š” ๊ฐ€์šด๋ฐ์„œ ์‹œ์ž‘ํ•˜๊ณ  
		// ๋„๋ง์ž๋Š” ์ขŒ์šฐ๋กœ ์ด๋™ํ•˜๋ฉด ์šฐ, ์ƒํ•˜๋กœ ์ด๋™ํ•˜๋ฉด ํ•˜ ์‹œ์ž‘
		// ๋‚˜๋ฌด์™€ ๋„๋ง์ž๋Š” ์ดˆ๊ธฐ์— ๊ฒน์ณ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

		// ๋„๋ง์ž ์ •๋ณด 
		for(int i = 0; i < M; i++) {
			st = new StringTokenizer(br.readLine());

			int tempX = Integer.parseInt(st.nextToken())-1;
			int tempY = Integer.parseInt(st.nextToken())-1;
			int tempD = Integer.parseInt(st.nextToken());

			if(tempD == 1) {
				tempD = 1; // ์šฐ
			}else if(tempD == 2) {
				tempD = 2; // ํ•˜
			}

			thieves[i] = new Pair(tempX, tempY, tempD);
		}

		// ๋‚˜๋ฌด ์ •๋ณด
		for(int i = 0; i < H; i++) {
			st = new StringTokenizer(br.readLine());
			trees[i] = new Pair(Integer.parseInt(st.nextToken())-1, Integer.parseInt(st.nextToken())-1);
		}

		// ์ด์ œ ์ˆ ๋ž˜ ์ดˆ๊ธฐ๊ฐ’ ์ •ํ•ด์ฃผ๊ณ  ๋ฐ”๋กœ ๋ฐฉํ–ฅ์ •ํ•ด์„œ ์‹œ๋ฎฌ ๋Œ๋ฆฌ๋ฉด ๋จ.
		tagger = new Pair(N/2, N/2, 0);

		simulation();

		System.out.println(answer);
	}

	static void simulation() {
		//์ˆ ๋ž˜๋Š” ์†Œ์šฉ๋Œ์ด ๋ฐฉํ–ฅ์œผ๋กœ ๋‚˜๊ฐ€์•ผํ•จ.
		// K๋ฒˆ ๋งŒํผ ์ง„ํ–‰
		int move = 1;
		int moveCnt = 0; // 2 ๊ฐ€ ๋ ๋•Œ๋งˆ๋‹ค move๋ฅผ 1์”ฉ ์˜ฌ๋ ค์คŒ
		int cnt = 0;
		dir = dxy;
		boolean rFlag = false;

		for(int t = 1; t <= K; t++) {
			moveThieves();

			int nx = tagger.x + dir[tagger.d][0];
			int ny = tagger.y + dir[tagger.d][1];

			tagger.x = nx;
			tagger.y = ny;
			
			cnt++;
			if(!rFlag && nx == 0 && ny == 0) {
				rFlag = true;
				dir = rdxy;
				tagger.d = 0;
				moveCnt = -1;
				cnt = 0;
				move = N-1;
			}

			else if(rFlag && nx == N/2 && ny == N/2) {
				rFlag = false;
				dir = dxy;
				tagger.d = 0;
				cnt = 0;
				moveCnt = 0;
				move = 1;
			}
			else {
				if(cnt == move) {
					cnt = 0;
					moveCnt++;
					tagger.d = (tagger.d+1) % 4;

					if(moveCnt == 2) {
						moveCnt = 0;
						if(rFlag) move -= 1;
						else move += 1;
					}
				}
			}





			countScore(t);

		}
	}	

	static void moveThieves() {
		for(int i = 0; i < M; i++) {
			if(thieves[i].d == -1) continue; // ์žกํžŒ ๊ฒฝ์šฐ
			if(thieves[i].getDistance(tagger.x, tagger.y) > 3) continue;

			int curX = thieves[i].x;
			int curY = thieves[i].y;
			int curD = thieves[i].d;

			int nx = curX + dxy[curD][0];
			int ny = curY + dxy[curD][1];

			// ์–ด์จ‹๋“  ๋‹ค์Œ์œ„์น˜์— ์ˆ ๋ž˜๊ฐ€ ์žˆ์–ด๋„ ๋ฒ—์–ด๋‚˜๋ฉด ๋ฐฉํ–ฅ์ „ํ™˜์€ ํ•ด์ค˜์•ผํ•จ.
			if(nx < 0 || ny < 0 || nx >= N || ny >= N) {
				thieves[i].d = (curD + 2) % 4;
				curD = thieves[i].d;

				nx = curX + dxy[curD][0];
				ny = curY + dxy[curD][1];
			}

			// ๋‹ค์Œ์œ„์น˜์— ์ˆ ๋ž˜๊ฐ€ ์žˆ๋‹ค๋ฉด
			if(tagger.getDistance(nx, ny) == 0) continue;

			// ์ˆ ๋ž˜๊ฐ€ ์—†๋‹ค๋ฉด
			thieves[i].x = nx;
			thieves[i].y = ny;			
		}
	}

	static void countScore(int turn) {
		int curD = tagger.d;

		for(int i = 0; i < 3; i++) { // ์ˆ ๋ž˜์˜ ์‹œ์•ผ๋Š” ์–ธ์ œ๋‚˜ 3
			int nx = tagger.x + dir[curD][0] * i;
			int ny = tagger.y + dir[curD][1] * i;

			if(nx < 0 || ny < 0 || nx >= N || ny >= N) continue;

			for(int j = 0; j < M; j++) { // ๋„๋ง์ž ์œ„์น˜ ์ฒดํฌ
				if(thieves[j].d == -1) continue;

				if(thieves[j].getDistance(nx, ny) == 0 && !checkTreeHide(nx, ny)) {
					thieves[j].d = -1;
					answer += turn;
				}
			}
		}
	}

	static boolean checkTreeHide(int x, int y) {
		for(int i = 0; i < H; i++) {
			if(trees[i].x == x && trees[i].y == y) return true;
		}

		return false;
	}
}

 

- ๊ตฌํ˜„์‹œ ์‹ค์ˆ˜(?) ๋•Œ๋ฌธ์— ์กฐ๊ธˆ ์• ๋ฅผ ๋จน์—ˆ๋‹ค. -> ์ˆ ๋ž˜์˜ ๋ฐฉํ–ฅ์€ dxy ์™€ rdxy ๋กœ ์ˆœ๋ฐฉํ–ฅ๊ณผ ์—ญ๋ฐฉํ–ฅ์„ ๊ตฌ๋ณ„ํ•ด๋†“๊ณ  ์ •์ž‘ countScore ๋ฉ”์„œ๋“œ์—์„œ ์ˆ ๋ž˜๊ฐ€ ๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ์—์„œ๋Š” dxy๋งŒ ์‚ฌ์šฉํ•ด์„œ rdxy ๋ฐฉํ–ฅ์œผ๋กœ ์ˆ ๋ž˜๊ฐ€ ์ด๋™ํ•  ๋•Œ ์ •ํ™•ํ•œ ๋ฐฉํ–ฅ์— ๋Œ€ํ•œ ์ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๊ตฌํ˜„์ด ๋˜์—ˆ์—ˆ๋‹ค. -> ์ฐพ๋Š”๋ฐ ๊ฑฐ์˜ 2์‹œ๊ฐ„์“ด๋“ฏ... 

ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋“ค์˜ ๊ตฌ๋ถ„์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

๋ฉ”์„œ๋“œ๋ช… ๊ธฐ๋Šฅ ๋น„๊ณ 
main - ๊ฐ์ข… static ๋ณ€์ˆ˜๋“ค๊ณผ ์ž…๋ ฅ๋ฐ์ดํ„ฐ๋ฅผ ์ „์ฒ˜๋ฆฌํ•œ๋‹ค.
- ๋˜ํ•œ Pair ํด๋ž˜์Šค ์„ ์–ธ์— ๋”ฐ๋ฅธ ๊ฐ ๊ฐ์ฒด๋ฅผ ์ธ์Šคํ„ด์Šคํ™”ํ•˜์—ฌ ๋ฐฐ์—ด์— ๋‹ด๋Š”๋‹ค.
- ์ดํ›„ simulation ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ตœ์ข…์ ์œผ๋กœ answer๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. 
 
simulation - ์ „์ฒด simulation์„ ์ง„ํ–‰ํ•œ๋‹ค. 
- board ๋ฅผ ์ง์ ‘ ๊ทธ๋ฆฌ๋Š”๊ฒŒ ์•„๋‹Œ ์ˆ ๋ž˜, ๋‚˜๋ฌด, ๋„๋ง์ž ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ขŒํ‘œ ๊ณ„์‚ฐ ๋ฐ ๋น„๊ต๋ฅผ ํ†ตํ•ด ํ’€์ด๋ฅผ ์ง„ํ–‰ํ•˜๊ฒŒ๋œ๋‹ค.
- ์‹ค์ œ ์ˆ ๋ž˜์˜ ์ด๋™์€ ํ•ด๋‹น ๋ฉ”์„œ๋“œ์—์„œ ๊ฐ turn์— ๋”ฐ๋ผ ์ด๋™์‹œํ‚จ๋‹ค.
 
moveThieves - ๋„๋ง์ž ๊ฐ์ฒด๋“ค์„ ๋ฐฐ์—ด์— ๋‹ด์€ thieves ๋ฐฐ์—ด์„ ์„ ์–ธํ–ˆ๋‹ค.
- ํ•ด๋‹น ๋ฐฐ์—ด ๋‚ด ์ €์žฅ๋œ Pair ๊ฐ์ฒด๋“ค์— ๋Œ€ํ•œ ์ด๋™์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. 
- ๋ฌธ์ œ์—์„œ ์ œ์‹œ๋œ ์กฐ๊ฑด์„ ๋ฐ”ํƒ•์œผ๋กœ ์ˆ ๋ž˜, ๋ฒ”์œ„ ๋“ฑ์— ๋”ฐ๋ผ ์ด๋™ํ•˜๊ฑฐ๋‚˜ ๋ฐฉํ–ฅ์„ ๋ฐ”๊พธ๋Š” ๊ณผ์ •์„ ํฌํ•จํ•œ๋‹ค.
 
countScore - ์ˆ ๋ž˜์˜ ์ด๋™์ด ๋๋‚˜๋ฉด ํ•ด๋‹น ์ˆ ๋ž˜๊ฐ€ ๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ์„ ํ†ตํ•ด ์ ์ˆ˜๋ฅผ ๊ตฌํ•ด์•ผํ•œ๋‹ค.
- ํ•ด๋‹น ์‹œ์ ๊นŒ์ง€ ์ด๋™ํ•œ ์ˆ ๋ž˜, ๋„๋ง์ž์˜ ์œ„์น˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‚˜๋ฌด์˜ ์œ„์น˜๋ฅผ ๋”ฐ์ ธ ์ˆ ๋ž˜๊ฐ€ ๋ช‡์ ์„  ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์žˆ๋Š”์ง€ ๊ณ„์‚ฐํ•˜๊ณ  ์ˆ ๋ž˜๊ฐ€ ๋„๋ง์ž๋ฅผ ์žก์œผ๋ฉด ๋„๋ง์ž์˜ ๋ฐฉํ–ฅ์„ -1 ๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ "์žกํž˜" ์ฒ˜๋ฆฌํ•œ๋‹ค.
 
checkTreeHide - ๋‚˜๋ฌด์˜ ์œ„์น˜๋Š” ๊ณ ์ •๋˜์–ด ์žˆ๋‹ค. 
- ๋”ฐ๋ผ์„œ ํ•ด๋‹น ๋‚˜๋ฌด๋“ค์˜ ์œ„์น˜๋ฅผ ์ธ์ž๋กœ ๋“ค์–ด์˜จ x, y ์ขŒํ‘œ์™€ ๋น„๊ตํ•˜์—ฌ ๋‚˜๋ฌด์™€ ์œ„์น˜๊ฐ€ ๊ฐ™์€์ง€ ์•„๋‹Œ์ง€๋ฅผ boolean ๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
- ์‚ฌ์‹ค ๋‚˜๋ฌด์˜ ์œ„์น˜๋Š” ๊ณ ์ •๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— board์ƒ์— ๊ทธ๋ƒฅ ์œ„์น˜๋ฅผ ๋ฐ•์•„๋†”๋„ ๋˜์—ˆ์„ ๋ฒ•ํ•˜๋‹ค. 
- board์˜ ํƒ€์ž…์€ boolean์œผ๋กœ ํ•˜๋ฉด H ์ตœ๋Œ€ 10000๊ฐœ์— ๋Œ€ํ•œ ๋ฐ˜๋ณต๋ฌธ์„ ๋ฐฐ์—ด ๊ฐ’ ์ฐธ์กฐ๋กœ ์ค„์ผ ์ˆ˜ ์žˆ์„ ๊ฒƒ.

 

๊ฐ€์žฅ ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐ๋˜๋Š” ๋กœ์ง์€ ์•„๋ž˜ ์ฝ”๋“œ์— ์žˆ๋Š” ์ˆ ๋ž˜์˜ ์ด๋™์ด๋‹ค.

 

    //์ˆ ๋ž˜๋Š” ์†Œ์šฉ๋Œ์ด ๋ฐฉํ–ฅ์œผ๋กœ ๋‚˜๊ฐ€์•ผํ•จ.
    // K๋ฒˆ ๋งŒํผ ์ง„ํ–‰
    int move = 1;
    int moveCnt = 0; // 2 ๊ฐ€ ๋ ๋•Œ๋งˆ๋‹ค move๋ฅผ 1์”ฉ ์˜ฌ๋ ค์คŒ
    int cnt = 0;
    dir = dxy;
    boolean rFlag = false;

    for(int t = 1; t <= K; t++) {
        moveThieves();

        int nx = tagger.x + dir[tagger.d][0];
        int ny = tagger.y + dir[tagger.d][1];

        tagger.x = nx;
        tagger.y = ny;

        cnt++;
        if(!rFlag && nx == 0 && ny == 0) {
            rFlag = true;
            dir = rdxy;
            tagger.d = 0;
            moveCnt = -1;
            cnt = 0;
            move = N-1;
        }

        else if(rFlag && nx == N/2 && ny == N/2) {
            rFlag = false;
            dir = dxy;
            tagger.d = 0;
            cnt = 0;
            moveCnt = 0;
            move = 1;
        }
        else {
            if(cnt == move) {
                cnt = 0;
                moveCnt++;
                tagger.d = (tagger.d+1) % 4;

                if(moveCnt == 2) {
                    moveCnt = 0;
                    if(rFlag) move -= 1;
                    else move += 1;
                }
            }
        }

        countScore(t);

    }

- ์ดˆ๊ธฐ move, moveCnt, cnt ๋ฅผ ์„ ์–ธํ•œ๋‹ค. ๊ฐ๊ฐ์˜ ์—ญํ• ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  - move : ํ˜„์žฌ ์ˆ ๋ž˜๊ฐ€ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€๊ฐ’ (ํ˜„์žฌ ๋ฐฉํ–ฅ์œผ๋กœ)

  - moveCnt : ์†Œ์šฉ๋Œ์ด์˜ ํŠน์„ฑ์ƒ (์ˆœ๋ฐฉํ–ฅ๊ธฐ์ค€) ์ƒ, ์šฐ, ํ•˜, ์ขŒ ์ด๋™์ด 1, 1, 2,2, 3,3,4,4 ... ์‹์œผ๋กœ ๋‘๋ฒˆ์”ฉ ๋ฐ˜๋ณต๋œ๋‹ค. ์ด๋•Œ, 2๋ฒˆ ์ด๋™ํ–ˆ๋Š”์ง€ ์ œ์–ด๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๋ณ€์ˆ˜์ด๋‹ค. 

  - cnt : move์˜ ๊ฐ’์€ ํ˜„์žฌ ์ˆ ๋ž˜๊ฐ€ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ“๊ฐ’์ด๋ผ๋ฉด ํ˜„์žฌ ์ˆ ๋ž˜๊ฐ€ ๋ช‡ ์นธ ์ด๋™ํ–ˆ๋Š”์ง€์— ๋Œ€ํ•œ ๊ฐ’์ด ํ•„์š”ํ•˜๋‹ค. ๊ทธ ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜์ด๋‹ค. 

- ์†Œ์šฉ๋Œ์ด ์›€์ง์ž„(์ˆœ๋ฐฉํ–ฅ) ์€ ์•„๋ž˜๋ฅผ ํ™•์ธํ•ด๋ณด์ž

์ˆœ๋ฐฉํ–ฅ ์†Œ์šฉ๋Œ์ด ์›€์ง์ž„, N=5 ์ธ๊ฒฝ์šฐ

- ์ˆœ๋ฐฉํ–ฅ์œผ๋กœ ์›€์ง์ผ ๋•Œ ์ˆ ๋ž˜๋Š” ์œ„๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ณ  ์ƒ -> ์šฐ -> ํ•˜ -> ์ขŒ ๋ฐฉํ–ฅ์ „ํ™˜์„ ๋ฐ˜๋ณตํ•œ๋‹ค. 

- ์—ฌ๊ธฐ์„œ ์ฃผ๋ชฉํ•  ๋ถ€๋ถ„์€ ๋งˆ์ง€๋ง‰ ์ฆ‰ N๊ณผ ๊ฐ™์€ ๊ฐ’์ด ๋˜๋Š” ๋งˆ์ง€๋ง‰ ์ด๋™์˜ ๊ฒฝ์šฐ์—๋Š” 5๋งŒํผ ์ด๋™ํ•˜๋ฉด ์ •ํ•ด์ง„ ๊ตฌ์—ญ์„ ๋ฒ—์–ด๋‚˜๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ํ•ด๋‹น ๋ถ€๋ถ„์„ ์ œ์–ดํ•ด์ค˜์•ผํ•˜๊ณ  ์œ„ ์ฝ”๋“œ์— ์•„๋ž˜์™€ ๊ฐ™์€ ์ œ์–ด๋ฌธ์ด ์ถ”๊ฐ€๋œ๋‹ค. 

  if(!rFlag && nx == 0 && ny == 0) {
            rFlag = true;
            dir = rdxy;
            tagger.d = 0;
            moveCnt = -1;
            cnt = 0;
            move = N-1;
        }

- rFlag๋Š” (reverseFlag) false์ผ ๋•Œ ์ˆœ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•˜๊ณ  ์žˆ์Œ์„ ๋œปํ•œ๋‹ค. 

- ํ•ด๋‹น ๋ถ€๋ถ„์—์„œ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๊ธฐ์ „์— ๋งˆ์ง€๋ง‰์œผ๋กœ ์ˆ ๋ž˜๊ฐ€ ์ด๋™ํ•˜๋Š” ์ขŒํ‘œ๊ฐ€ 0,0 ์ด๋ผ๋ฉด rFlag๋ฅผ true๋กœ ๋ฐ”๊ฟ”์ฃผ๊ณ  ์ดํ›„ dir ์žฌ์„ค์ •ํ•ด์ค€๋‹ค. 

- cnt๋Š” ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ๋‹ค์‹œ ์„ธ์ค˜์•ผํ•ด์„œ 0์œผ๋กœ ์„ค์ •ํ•˜๊ณ , move ๊ฐ’์˜ ๊ฒฝ์šฐ์—๋Š” N-1 ๋กœ ์„ค์ •ํ•ด์ค€๋‹ค.(moveCnt์—์„œ ์„ค๋ช…์ถ”๊ฐ€)

- ํ•ด๋‹น ์ฝ”๋“œ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์€ moveCnt ๋ฅผ -1๋กœ ์„ค์ •ํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ค. 

  - moveCnt๋ฅผ -1๋กœ ์„ค์ •ํ•˜๋Š” ์ด์œ ๋Š” 0,0 ์ขŒํ‘œ์œ„์น˜์—์„œ ์ˆ ๋ž˜์˜ ์›€์ง์ž„์ด ๋๋‚˜๋ฉด ๋˜๋Œ์•„๊ฐˆ๋•Œ ๊ธฐ์กด 1,1,2,2,3,3,4,4,... ๋กœ ์ˆœ๋ฐฉํ–ฅ์ด๋™์„ ํ–ˆ๋‹ค๊ณ  ๋Œ์•„๊ฐˆ๋•Œ์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ 4,4,3,3,2,2,1,1 ์„ ํ•ด์•ผํ•  ์ˆœ ์—†๋‹ค. ์•„๋ž˜ ๊ทธ๋ฆผ์„ ๋ณด์ž

์—ญ๋ฐฉํ–ฅ ์›€์ง์ž„, N=5 ์ธ ๊ฒฝ์šฐ

- ์—ญ๋ฐฉํ–ฅ์˜ ๊ฒฝ์šฐ์—๋Š” 0,0 ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด N-1 ๋งŒํผ 3๋ฒˆ ์›€์ง์ด๊ณ  ๊ทธ ๋‹ค์Œ 2ํšŒ์”ฉ ๋ฐ˜๋ณต๋œ๋‹ค. 

- ๋”ฐ๋ผ์„œ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ๋ฐฉํ–ฅ์ „ํ™˜์„ ํ•  ๋•Œ ์ดˆ๊ธฐ์—๋Š” moveCnt = -1๋กœ ๊ฐ’์„ ์„ค์ •ํ•˜๊ณ  ์ดํ›„ else ๋ฌธ์—์„œ ๋ฐฉํ–ฅ์ „ํ™˜์„ ํ•  ๋•Œ์—๋Š” ๋‹ค์‹œ moveCnt = 0์œผ๋กœ ํ•ด์ฃผ๋Š” ๊ฒƒ์„ ํ†ตํ•ด ์—ญ๋ฐฉํ–ฅ ์ถœ๋ฐœํ›„ N-1 ๋งŒํผ ์ด 3๋ฒˆ ์›€์ง์ด๊ณ  move ๊ฐ’์„ ์ค„์ด๋„๋ก ๊ตฌํ˜„ํ–ˆ๋‹ค. 

 

	if(!rFlag && nx == 0 && ny == 0) {
            rFlag = true;
            dir = rdxy;
            tagger.d = 0;
            moveCnt = -1;
            cnt = 0;
            move = N-1;
        }

        else if(rFlag && nx == N/2 && ny == N/2) {
            rFlag = false;
            dir = dxy;
            tagger.d = 0;
            cnt = 0;
            moveCnt = 0;
            move = 1;
        }
        else {
            if(cnt == move) {
                cnt = 0;
                moveCnt++;
                tagger.d = (tagger.d+1) % 4;

                if(moveCnt == 2) {
                    moveCnt = 0;
                    if(rFlag) move -= 1;
                    else move += 1;
                }
            }
        }

- ๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ ์ค‘์‹ฌ์ ์œผ๋กœ ๋Œ์•„๊ฐ€๋ฉด ์ดˆ๊ธฐ ์„ค์ •ํ–ˆ๋˜ ๋Œ€๋กœ rFlag๋Š” false, dir ๋ฐฉํ–ฅ์„ ์ˆœ๋ฐฉํ–ฅ์œผ๋กœ ์„ค์ •ํ•˜๊ณ  cnt, moveCnt, move ๊ฐ’์„ ์ดˆ๊ธฐ ์„ค์ •ํ–ˆ๋˜ ๊ฐ’๋“ค๋ก ์„ค์ •ํ•ด์ฃผ๋ฉด ๋งŽ์€ ํšŸ์ˆ˜์ผ์ง€๋ผ๋„ ์ˆ ๋ž˜๋Š” ์ˆœ๋ฐฉํ–ฅ, ์—ญ๋ฐฉํ–ฅ ์›€์ง์ž„์„ ๋ฐ˜๋ณตํ•  ์ˆ˜ ์žˆ๋‹ค.

 

+) ์„ค๋ช…์ด ์ถฉ๋ถ„ํ•œ์ง€ ๋ชจ๋ฅด๊ฒ ๋„ค์š”... ใ… 

'๐Ÿ’ฏ CodingTest > CodeTree' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[CodeTree] ๋‚˜๋ฌด๋ฐ•๋ฉธ(์‚ผ์„ฑ SW ์—ญ๋Ÿ‰ํ…Œ์ŠคํŠธ 2022 ์ƒ๋ฐ˜๊ธฐ ์˜คํ›„ 2๋ฒˆ ๋ฌธ์ œ)  (6) 2024.10.10
[CodeTree] ์˜ˆ์ˆ ์„ฑ(์‚ผ์„ฑ SW ์—ญ๋Ÿ‰ํ…Œ์ŠคํŠธ 2022 ์ƒ๋ฐ˜๊ธฐ ์˜ค์ „ 2๋ฒˆ ๋ฌธ์ œ)  (1) 2024.09.13
[Code Tree] ์ •์œก๋ฉด์ฒด ๊ตด๋ฆฌ๊ธฐ (์‚ผ์„ฑ SW ์—ญ๋Ÿ‰ํ…Œ์ŠคํŠธ 2016 ํ•˜๋ฐ˜๊ธฐ 1๋ฒˆ)  (0) 2024.09.02
'๐Ÿ’ฏ CodingTest/CodeTree' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [CodeTree] ๋‚˜๋ฌด๋ฐ•๋ฉธ(์‚ผ์„ฑ SW ์—ญ๋Ÿ‰ํ…Œ์ŠคํŠธ 2022 ์ƒ๋ฐ˜๊ธฐ ์˜คํ›„ 2๋ฒˆ ๋ฌธ์ œ)
  • [CodeTree] ์˜ˆ์ˆ ์„ฑ(์‚ผ์„ฑ SW ์—ญ๋Ÿ‰ํ…Œ์ŠคํŠธ 2022 ์ƒ๋ฐ˜๊ธฐ ์˜ค์ „ 2๋ฒˆ ๋ฌธ์ œ)
  • [Code Tree] ์ •์œก๋ฉด์ฒด ๊ตด๋ฆฌ๊ธฐ (์‚ผ์„ฑ SW ์—ญ๋Ÿ‰ํ…Œ์ŠคํŠธ 2016 ํ•˜๋ฐ˜๊ธฐ 1๋ฒˆ)
S.Honey
S.Honey
  • S.Honey
    Algo ์“ฐ์ž
    S.Honey
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (123)
      • ํšŒ๊ณ  (0)
        • ์ทจ์—… ํ›„ ํšŒ๊ณ  (0)
      • ๐Ÿƒ Frontend Road-Map (2)
        • ๐Ÿšฉ Summary (1)
        • ๐Ÿ“š Road-Map Contents (1)
        • ๐ŸŸง HTML (0)
        • ๐ŸŸฆ CSS (0)
        • ๐ŸŸจ Javascript (0)
        • โฌœ React (0)
        • ๐ŸŸช Redux (0)
      • Backend (0)
        • QueryDSL (0)
      • ๐Ÿ’ป Programming Language (54)
        • C# (51)
        • Flutter-Dart (3)
        • Java (0)
      • ๐Ÿ“š Computer Science (4)
        • Algorithms (4)
        • Database (0)
        • Network (0)
        • Operating System(OS) (0)
      • ๐Ÿ’ฏ CodingTest (60)
        • BaekJoon (22)
        • Programmers (34)
        • CodeTree (4)
      • โœ’๏ธ Design Pattern (1)
      • ๐Ÿฑ Etc (2)
        • Jenkins Plugin ์ œ์ž‘๊ธฐ (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ๋งํฌ

    • ๊ณต์ง€์‚ฌํ•ญ

      • ๐Ÿ“– ๊ณต๋ถ€ ์ฐธ๊ณ  ๊ต์žฌ ๋ฐ ์ž๋ฃŒ
    • ์ธ๊ธฐ ๊ธ€

    • ํƒœ๊ทธ

      DP
      JS
      ์นด์นด์˜ค
      ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
      c#
      Java
      ์ฝ”๋”ฉํ…Œ์ŠคํŠธ
      programmers
      DART
      ํŒŒ์ด์ฌ
      ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰
      ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ
      ์‹œ๋ฎฌ๋ ˆ์ด์…˜
      ์ด์ง„ํƒ์ƒ‰
      ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ
      JavaScript
      ๋ฐฑ์ค€
      ์ฝ”๋“œํŠธ๋ฆฌ
      ์‚ผ์„ฑsw์—ญํ…Œ
      ์“ฐ์…จ์ž–์•„
      ์•Œ๊ณ ๋ฆฌ์ฆ˜
      ์ž๋ฃŒ๊ตฌ์กฐ
      ๊ตฌํ˜„
      sort
      Flutter
      ์Šคํ„ฐ๋””
      BFS
      BAEKJOON
      ๋ฌธ์ž์—ด ํŒŒ์‹ฑ
      Algorithm
    • ์ตœ๊ทผ ๋Œ“๊ธ€

    • ์ตœ๊ทผ ๊ธ€

    • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.1
    S.Honey
    [Code Tree] ์ˆ ๋ž˜์žก๊ธฐ(์‚ผ์„ฑ SW ์—ญ๋Ÿ‰ํ…Œ์ŠคํŠธ 2022 ์ƒ๋ฐ˜๊ธฐ ์˜ค์ „ 1๋ฒˆ ๋ฌธ์ œ)
    ์ƒ๋‹จ์œผ๋กœ

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”