๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŽฏPS - Baekjoon, etc/๊ตฌํ˜„

[์ด๊ฒƒ์ด ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋‹ค] ๊ฒŒ์ž„ ๊ฐœ๋ฐœ (Java)

by hyeon-z 2023. 3. 6.

์‹œ๊ฐ„์ œํ•œ

1์ดˆ

 

๋ฌธ์ œ

ํ˜„๋ฏผ์ด๋Š” ๊ฒŒ์ž„ ์บ๋ฆญํ„ฐ๊ฐ€ ๋งต ์•ˆ์—์„œ ์›€์ง์ด๋Š” ์‹œ์Šคํ…œ์„ ๊ฐœ๋ฐœ ์ค‘์ด๋‹ค.

์บ๋ฆญํ„ฐ๊ฐ€ ์žˆ๋Š” ์žฅ์†Œ๋Š” 1 x 1 ํฌ๊ธฐ์˜ ์ •์‚ฌ๊ฐํ˜•์œผ๋กœ ์ด๋ค„์ง„ N x M ํฌ๊ธฐ์˜ ์ง์‚ฌ๊ฐํ˜•์œผ๋กœ, ๊ฐ๊ฐ์˜ ์นธ์€ ์œก์ง€ ๋˜๋Š” ๋ฐ”๋‹ค์ด๋‹ค. ์บ๋ฆญํ„ฐ๋Š” ๋™์„œ๋‚จ๋ถ ์ค‘ ํ•œ ๊ณณ์„ ๋ฐ”๋ผ๋ณธ๋‹ค.

 

๋งต์˜ ๊ฐ ์นธ์€ (A, B)๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๊ณ , A๋Š” ๋ถ์ชฝ์œผ๋กœ๋ถ€ํ„ฐ ๋–จ์–ด์ง„ ์นธ์˜ ๊ฐœ์ˆ˜, B๋Š” ์„œ์ชฝ์œผ๋กœ๋ถ€ํ„ฐ ๋–จ์–ด์ง„ ์นธ์˜ ๊ฐœ์ˆ˜์ด๋‹ค.

์บ๋ฆญํ„ฐ๋Š” ์ƒํ•˜์ขŒ์šฐ๋กœ ์›€์ง์ผ ์ˆ˜ ์žˆ๊ณ , ๋ฐ”๋‹ค๋กœ ๋˜์–ด ์žˆ๋Š” ๊ณต๊ฐ„์—๋Š” ๊ฐˆ ์ˆ˜ ์—†๋‹ค.

์บ๋ฆญํ„ฐ์˜ ์›€์ง์ž„์„ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด ์ •ํ•ด ๋†“์€ ๋งค๋‰ด์–ผ์€ ์ด๋Ÿฌํ•˜๋‹ค.

 

1. ํ˜„์žฌ ์œ„์น˜์—์„œ ํ˜„์žฌ ๋ฐฉํ–ฅ์„ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ ๋ฐฉํ–ฅ(๋ฐ˜์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ 90๋„ ํšŒ์ „ํ•œ ๋ฐฉํ–ฅ)๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ๊ฐˆ ๊ณณ์„ ์ •ํ•œ๋‹ค.

2. ์บ๋ฆญํ„ฐ์˜ ๋ฐ”๋กœ ์™ผ์ชฝ ๋ฐฉํ–ฅ์— ์•„์ง ๊ฐ€๋ณด์ง€ ์•Š์€ ์นธ์ด ์กด์žฌํ•œ๋‹ค๋ฉด, ์™ผ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „ํ•œ ๋‹ค์Œ ์™ผ์ชฝ์œผ๋กœ ํ•œ ์นธ์„ ์ „์ง„ํ•œ๋‹ค.

์™ผ์ชฝ ๋ฐฉํ–ฅ์— ๊ฐ€๋ณด์ง€ ์•Š์€ ์นธ์ด ์—†๋‹ค๋ฉด, ์™ผ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „๋งŒ ์ˆ˜ํ–‰ํ•˜๊ณ  1๋‹จ๊ณ„๋กœ ๋Œ์•„๊ฐ„๋‹ค.

3. ๋งŒ์•ฝ ๋„ค ๋ฐฉํ–ฅ ๋ชจ๋‘ ์ด๋ฏธ ๊ฐ€๋ณธ ์นธ์ด๊ฑฐ๋‚˜ ๋ฐ”๋‹ค๋กœ ๋˜์–ด ์žˆ๋Š” ์นธ์ธ ๊ฒฝ์šฐ์—๋Š”, ๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ์„ ์œ ์ง€ํ•œ ์ฑ„๋กœ ํ•œ ์นธ ๋’ค๋กœ ๊ฐ€๊ณ  1๋‹จ๊ณ„๋กœ ๋Œ์•„๊ฐ„๋‹ค. ๋‹จ, ์ด๋•Œ ๋’ค์ชฝ ๋ฐฉํ–ฅ์ด ๋ฐ”๋‹ค์ธ ์นธ์ด๋ผ ๋’ค๋กœ ๊ฐˆ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ์›€์ง์ž„์„ ๋ฉˆ์ถ˜๋‹ค.

 

ํ˜„๋ฏผ์ด๋Š” ์œ„ ๊ณผ์ •์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋ฉด์„œ ์บ๋ฆญํ„ฐ์˜ ์›€์ง์ž„์— ์ด์ƒ์ด ์žˆ๋Š”์ง€ ํ…Œ์ŠคํŠธํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

๋งค๋‰ด์–ผ์— ๋”ฐ๋ผ ์บ๋ฆญํ„ฐ๋ฅผ ์ด๋™์‹œํ‚จ ๋’ค์—, ์บ๋ฆญํ„ฐ๊ฐ€ ๋ฐฉ๋ฌธํ•œ ์นธ์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“œ์‹œ์˜ค.

 

์ž…๋ ฅ

- ์ฒซ์งธ ์ค„์— ๋งต์˜ ์„ธ๋กœ ํฌ๊ธฐ N๊ณผ ๊ฐ€๋กœ ํฌ๊ธฐ M์„ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ž…๋ ฅํ•œ๋‹ค. (3 <= N, M <= 50)

- ๋‘˜์งธ ์ค„์— ๊ฒŒ์ž„ ์บ๋ฆญํ„ฐ๊ฐ€ ์žˆ๋Š” ์นธ์˜ ์ขŒํ‘œ (A, B)์™€ ๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ d๊ฐ€ ๊ฐ๊ฐ ์„œ๋กœ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ฃผ์–ด์ง„๋‹ค.

  ๋ฐฉํ–ฅ ์„ ์˜ ๊ฐ’์œผ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด 4๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•œ๋‹ค.(0: ๋ถ์ชฝ , 1: ๋™์ชฝ , 2: ๋‚จ์ชฝ , 3: ์„œ์ชฝ)

- ์…‹์งธ ์ค„๋ถ€ํ„ฐ ๋งต์ด ์œก์ง€์ธ์ง€ ๋ฐ”๋‹ค์ธ์ง€์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. N๊ฐœ์˜ ์ค„์— ๋งต์˜ ์ƒํƒœ๊ฐ€ ๋ถ์ชฝ๋ถ€ํ„ฐ ๋‚จ์ชฝ ์ˆœ์„œ๋Œ€๋กœ, ๊ฐ ์ค„์˜ ๋ฐ์ดํ„ฐ๋Š” ์„œ์ชฝ๋ถ€ํ„ฐ ๋™์ชฝ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ๋งต์˜ ์™ธ๊ณฝ์€ ํ•ญ์ƒ ๋ฐ”๋‹ค๋กœ ๋˜์–ด ์žˆ๋‹ค. (0: ์œก์ง€ , 1: ๋ฐ”๋‹ค)

- ์ฒ˜์Œ์— ๊ฒŒ์ž„ ์บ๋ฆญํ„ฐ๊ฐ€ ์œ„์น˜ํ•œ ์นธ์˜ ์ƒํƒœ๋Š” ํ•ญ์ƒ ์œก์ง€์ด๋‹ค.

์ž…๋ ฅ ์˜ˆ์‹œ

4 4
1 1 0
1 1 1 1 
1 0 0 1
1 1 0 1
1 1 1 1

 

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์ด๋™์„ ๋งˆ์นœ ํ›„ ์บ๋ฆญํ„ฐ๊ฐ€ ๋ฐฉ๋ฌธํ•œ ์นธ์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

์ถœ๋ ฅ ์˜ˆ์‹œ

3

๋ฌธ์ œ ํ’€์ด ๊ณผ์ •

๋งต์˜ ๊ตฌ์กฐ๋ฅผ 2์ฐจ์› ๋ฐฐ์—ด์— ์ €์žฅ

 

int[][] map = new int[N][M];
for (int i = 0; i < N; i++) {
    st = new StringTokenizer(br.readLine());
    for (int j = 0; j < M; j++) {
        map[i][j] = Integer.parseInt(st.nextToken());
    }
}

์„ธ๋กœ ํฌ๊ธฐ N, ๊ฐ€๋กœ ํฌ๊ธฐ M๋งŒํผ์˜ ๋ฐฐ์—ด์„ ํ• ๋‹นํ•œ ํ›„ 2์ค‘ for๋ฌธ์„ ํ†ตํ•ด ๋งต์˜ ๊ตฌ์กฐ๋ฅผ 2์ฐจ์› ๋ฐฐ์—ด์— ์ €์žฅํ•œ๋‹ค.

 

๋ฐฉํ–ฅ์„ ์„ค์ •ํ•˜๋Š” dx, dy ๋ฐฐ์—ด ๋งŒ๋“ค๊ธฐ
์บ๋ฆญํ„ฐ๋Š” ์ƒํ•˜์ขŒ์šฐ๋กœ ์›€์ง์ผ ์ˆ˜ ์žˆ๋‹ค.

์œ„์˜ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์บ๋ฆญํ„ฐ๋Š” ๋ถ์ชฝ, ๋™์ชฝ, ๋‚จ์ชฝ, ์„œ์ชฝ์œผ๋กœ ์ด๋™์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด ์กฐ๊ธˆ ๋” ์ƒ์„ธํžˆ ์‚ดํŽด๋ณด๋ฉด

ํ˜„์žฌ ์บ๋ฆญํ„ฐ์˜ ์œ„์น˜ (1, 1)

๋ถ์ชฝ์œผ๋กœ ์ด๋™ํ•œ ๊ฒฝ์šฐ: (0, 1) -> ํ–‰ -1

๋™์ชฝ์œผ๋กœ ์ด๋™ํ•œ ๊ฒฝ์šฐ: (1, 2) -> ์—ด  +1

๋‚จ์ชฝ์œผ๋กœ ์ด๋™ํ•œ ๊ฒฝ์šฐ: (2, 1) -> ํ–‰ +1

์„œ์ชฝ์œผ๋กœ ์ด๋™ํ•œ ๊ฒฝ์šฐ: (1, 0) -> ์—ด -1

์ด๋ ‡๊ฒŒ ํ–‰(x), ์—ด(y)์˜ ์ขŒํ‘œ๊ฐ€ ๋ณ€ํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

์ด๋ฅผ ํ†ตํ•˜์—ฌ dx, dy๋ฐฐ์—ด์„ ๋งŒ๋“ ๋‹ค.

int[] dx = {-1, 0, 1, 0};
int[] dy = {0, 1, 0, -1};

 

์บ๋ฆญํ„ฐ ๋งค๋‰ด์–ผ ๋ถ„์„

๋งค๋‰ด์–ผ์„ ์ฐจ๊ทผ์ฐจ๊ทผ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•ด ๋ณด์ž.

 

1๋‹จ๊ณ„

ํ˜„์žฌ ์œ„์น˜์—์„œ ํ˜„์žฌ ๋ฐฉํ–ฅ์„ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ ๋ฐฉํ–ฅ(๋ฐ˜์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ 90๋„ ํšŒ์ „ํ•œ ๋ฐฉํ–ฅ)๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ๊ฐˆ ๊ณณ์„ ์ •ํ•œ๋‹ค.

์ž…๋ ฅ ๊ฐ’์„ ๋ฐ›์œผ๋ฉด ์บ๋ฆญํ„ฐ์˜ ๋ฐฉํ–ฅ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ํ•ด๋‹น ๋ฐฉํ–ฅ์„ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ์œผ๋กœ ํšŒ์ „ํ•œ๋‹ค.

 

๋งŒ์•ฝ ์บ๋ฆญํ„ฐ์˜ ๋ฐฉํ–ฅ์ด ๋ถ์ชฝ์ธ ๊ฒฝ์šฐ, ๋ถ -> ์„œ -> ๋‚จ -> ๋™ -> ๋ถ์œผ๋กœ ํšŒ์ „ํ•œ๋‹ค.

ํ•ด๋‹น ๋ฐฉํ–ฅ์˜ ๊ฐ’๊ณผ ํ•จ๊ป˜ ๋ณด๋ฉด 0 -> 3 -> 2 -> 1 -> 0์ด ๋œ๋‹ค.

๊ทœ์น™์„ ์ฐพ์•„๋ณด๋ฉด d๊ฐ€ 0์ธ ๊ฒฝ์šฐ๋Š” 3์ด ๋˜๊ณ  ์ด๋ฅผ ์ œ์™ธํ•œ ๊ฒฝ์šฐ๋Š” d - 1์ด๋‹ค. 

d -= 1;
if (d == -1) {
    d = 3;
}

 

2๋‹จ๊ณ„

์บ๋ฆญํ„ฐ์˜ ๋ฐ”๋กœ ์™ผ์ชฝ ๋ฐฉํ–ฅ์— ์•„์ง ๊ฐ€๋ณด์ง€ ์•Š์€ ์นธ์ด ์กด์žฌํ•œ๋‹ค๋ฉด, ์™ผ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „ํ•œ ๋‹ค์Œ ์™ผ์ชฝ์œผ๋กœ ํ•œ ์นธ์„ ์ „์ง„ํ•œ๋‹ค. ์™ผ์ชฝ ๋ฐฉํ–ฅ์— ๊ฐ€๋ณด์ง€ ์•Š์€ ์นธ์ด ์—†๋‹ค๋ฉด, ์™ผ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „๋งŒ ์ˆ˜ํ–‰ํ•˜๊ณ  1๋‹จ๊ณ„๋กœ ๋Œ์•„๊ฐ„๋‹ค.

์ด์ œ๋Š” ์บ๋ฆญํ„ฐ์˜ ๋ฐฉํ–ฅ๋Œ€๋กœ ์•ž์œผ๋กœ ํ•œ ์นธ ๋‚˜์•„๊ฐ€๋ณผ ์ฐจ๋ก€์ด๋‹ค.

์กฐ๊ฑด์— ๋”ฐ๋ฅด๋ฉด ์œก์ง€์ธ ์•„์ง ๊ฐ€๋ณด์ง€ ์•Š์€ ์นธ๋งŒ ์บ๋ฆญํ„ฐ๋Š” ์ „์ง„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์œ„์—์„œ ๊ตฌํ˜„ํ•œ dx, dy๋ฐฐ์—ด์„ ํ™œ์šฉํ•˜์—ฌ ๋‹ค์Œ x, y์ขŒํ‘œ๋ฅผ ๊ตฌํ•œ๋‹ค.

int nx = A + dx[d];
int ny = B + dy[d];

 

์ตœ์ข… ์ถœ๋ ฅ ๊ฐ’์€ ์บ๋ฆญํ„ฐ๊ฐ€ ๋ฐฉ๋ฌธํ•œ ์นธ์˜ ์ˆ˜์ด๋‹ค.

์ฒ˜์Œ ์บ๋ฆญํ„ฐ๊ฐ€ ์„œ์žˆ๋˜ ์นธ์€ ๋ฐ˜๋“œ์‹œ ๋ฐฉ๋ฌธํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ moveCount๋ฅผ 1๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

๋˜ํ•œ ์บ๋ฆญํ„ฐ๋Š” ๊ฐ€๋ณด์ง€ ์•Š์€ ์นธ๋งŒ ์ „์ง„ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฒ˜์Œ ์นธ์€ -1๋กœ ๋”ฐ๋กœ ์ฒดํฌํ•œ๋‹ค.

int moveCount = 1;
map[A][B] = -1;

 

map์—์„œ ์บ๋ฆญํ„ฐ๊ฐ€ ๋ฐฉ๋ฌธํ•œ ๊ฒฝ์šฐ๋Š” -1์ด๊ณ  ๋ฐ”๋‹ค์ธ ๊ฒฝ์šฐ๋Š” 1์ด๋ฏ€๋กœ ๋‹ค์Œ ์นธ์˜ ๊ฐ’์ด 0์ธ ๊ฒฝ์šฐ๊ฐ€ "์œก์ง€์ธ ์•„์ง ๊ฐ€๋ณด์ง€ ์•Š์€ ์นธ"์ด ๋œ๋‹ค.

ํ•ด๋‹น ์นธ์— ์ „์ง„ํ•œ ๊ฒฝ์šฐ ๊ทธ ์นธ์„ -1๋กœ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ ํ•œ ํ›„ ํ˜„์žฌ ์บ๋ฆญํ„ฐ์˜ ์ขŒํ‘œ๋กœ ๋ฐ”๊พผ๋‹ค.

์บ๋ฆญํ„ฐ๋Š” ์ƒˆ๋กœ์šด ์นธ์„ ๋ฐฉ๋ฌธํ–ˆ์œผ๋ฏ€๋กœ moveCount์˜ ๊ฐ’์€ 1 ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.

while (true) {
    if (map[nx][ny] == 0) {
        map[nx][ny] = -1;
        A = nx;
        B = ny;
        moveCount++;
        continue;
    }
 }

 

3๋‹จ๊ณ„

๋งŒ์•ฝ ๋„ค ๋ฐฉํ–ฅ ๋ชจ๋‘ ์ด๋ฏธ ๊ฐ€๋ณธ ์นธ์ด๊ฑฐ๋‚˜ ๋ฐ”๋‹ค๋กœ ๋˜์–ด ์žˆ๋Š” ์นธ์ธ ๊ฒฝ์šฐ์—๋Š”, ๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ์„ ์œ ์ง€ํ•œ ์ฑ„๋กœ ํ•œ ์นธ ๋’ค๋กœ ๊ฐ€๊ณ  1๋‹จ๊ณ„๋กœ ๋Œ์•„๊ฐ„๋‹ค. ๋‹จ, ์ด๋•Œ ๋’ค์ชฝ ๋ฐฉํ–ฅ์ด ๋ฐ”๋‹ค์ธ ์นธ์ด๋ผ ๋’ค๋กœ ๊ฐˆ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ์›€์ง์ž„์„ ๋ฉˆ์ถ˜๋‹ค.

์บ๋ฆญํ„ฐ์˜ ์ƒํ•˜์ขŒ์šฐ ๋„ค ๋ฐฉํ–ฅ ๋ชจ๋‘ ์ „์ง„ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ, ํ•œ ์นธ ๋’ค๋กœ ์ด๋™ํ•ด์•ผ ํ•œ๋‹ค.

- ๋’ท ์นธ์ด ์œก์ง€์ธ ๊ฒฝ์šฐ: 1๋‹จ๊ณ„๋กœ ๋Œ์•„๊ฐ

- ๋’ท ์นธ์ด ๋ฐ”๋‹ค์ธ ๊ฒฝ์šฐ: ์›€์ง์ž„์„ ๋ฉˆ์ถ˜๋‹ค(์ข…๋ฃŒ)

 

๋จผ์ € 3๋‹จ๊ณ„๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์บ๋ฆญํ„ฐ์˜ ํšŒ์ „ ๊ฐœ์ˆ˜๋ฅผ ์ฒดํฌํ•ด์•ผ ํ•œ๋‹ค.

๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฉด์„œ turnCount์˜ ๊ฐ’์„ 1์”ฉ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.

int turnCount = 0;

while (true) {
    turnCount++;
    turnLeft();
}

 

๋ช…์‹ฌํ•  ๊ฒƒ!!

๋‹ค์Œ ์นธ์œผ๋กœ ์ „์ง„ํ•œ ๊ฒฝ์šฐ์—๋Š” turnCount์˜ ๊ฐ’์„ 0์œผ๋กœ ์ดˆ๊ธฐํ™”์‹œํ‚จ๋‹ค.

while (true) {
    if (map[nx][ny] == 0) {
        map[nx][ny] = -1;
        A = nx;
        B = ny;
        moveCount++;
        turnCount = 0;
        continue;
    }
 }

 

์ด์ œ turnCount์˜ ๊ฐ’์ด 4๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.

๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ํ•œ ์นธ ์•ž์œผ๋กœ ๊ฐˆ ๋•Œ๋Š” "+"๋กœ ํ•œ ์นธ ๋’ค๋กœ ๊ฐˆ ๋•Œ๋Š” "-"๋กœ ํ‘œํ˜„ํ–ˆ๋‹ค. 

 

ํ•ด๋‹น ์นธ์ด ๋ฐ”๋‹ค์ธ ๊ฒฝ์šฐ์—๋Š” while๋ฌธ์„ ์ข…๋ฃŒํ•˜๊ณ  ๋ฐ”๋‹ค๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ์—๋Š” ํ˜„์žฌ ์บ๋ฆญํ„ฐ์˜ ์ขŒํ‘œ๋ฅผ ๋ณ€๊ฒฝํ•œ ํ›„ turnCount์˜ ๊ฐ’์„ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•˜์—ฌ ๋‹ค์‹œ 1๋‹จ๊ณ„๋กœ ๋Œ์•„๊ฐ„๋‹ค.

if (turnCount == 4) {
    nx = A - dx[d];
    ny = B - dy[d];

    if (map[nx][ny] == 1) {
        break;
    }
    A = nx;
    B = ny;
    turnCount = 0;
}

๊ตฌํ˜„ ์ฝ”๋“œ

public class TC_4_2 {
    static int d;

    // ์™ผ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „
    static void turnLeft() {
        d -= 1;
        if (d == -1) {
            d = 3;
        }
    }

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

        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());

        st = new StringTokenizer(br.readLine());
        int A = Integer.parseInt(st.nextToken());
        int B = Integer.parseInt(st.nextToken());
        d = Integer.parseInt(st.nextToken());

        // ๋งต ๋ฐฐ์—ด์— ์ €์žฅ
        int[][] map = new int[N][M];
        for (int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine());
            for (int j = 0; j < M; j++) {
                map[i][j] = Integer.parseInt(st.nextToken());
            }
        }

        int[] dx = {-1, 0, 1, 0};
        int[] dy = {0, 1, 0, -1};
        int turnCount = 0;
        int moveCount = 1;

        // ์ฒ˜์Œ ์žˆ์—ˆ๋˜ ๊ณณ ๋ฐฉ๋ฌธํ•œ ์นธ์œผ๋กœ ์ฒดํฌ
        map[A][B] = -1;

        while (true) {
            turnCount++;

            turnLeft();

            int nx = A + dx[d];
            int ny = B + dy[d];

            // ์œก์ง€์ด๋ฉด์„œ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์นธ์ธ ๊ฒฝ์šฐ
            if (map[nx][ny] == 0) {
                map[nx][ny] = -1;
                A = nx;
                B = ny;
                moveCount++;
                turnCount = 0;
                continue;
            }

            // ๋„ค ๋ฐฉํ–ฅ ๋ชจ๋‘ ํ™•์ธ
            if (turnCount == 4) {
                nx = A - dx[d];
                ny = B - dy[d];

                // ํ•œ ์นธ ๋’ค๊ฐ€ ๋ฐ”๋‹ค์ธ ๊ฒฝ์šฐ
                if (map[nx][ny] == 1) {
                    break;
                }
                A = nx;
                B = ny;
                turnCount = 0;
            }
        }
        System.out.println(moveCount);
    }
}

 

 

Reference

์ด๊ฒƒ์ด ์ทจ์—…์„ ์œ„ํ•œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋‹ค - ๋‚˜๋™๋นˆ

๋Œ“๊ธ€