https://programmers.co.kr/learn/courses/30/lessons/49994
์ฝ๋
class Solution {
// U,D,R,L - ์,์๋,์ค๋ฅธ์ชฝ,์ผ์ชฝ ์
public static int[] dx = {0, 0, 1, -1};
public static int[] dy = {-1, 1, 0, 0};
// ๋งต์ ํฌ๊ธฐ = -5 ~ 5๊น์ง์ด๋ฏ๋ก 11x11
public static boolean[][][][] visit = new boolean[11][11][11][11];
public int solution(String dirs) {
int answer = 0;
/* x,y = ์บ๋ฆญํฐ๊ฐ ์ด๋ํ๊ธฐ ์ ์์น, nextX, nextY = ์บ๋ฆญํฐ๊ฐ ์ด๋ํ ํ ์์น */
int x = 0;
int y = 0;
// ๋ฌธ์ ์ ๋ฒ์๋ -5~5์ด๊ณ , ๋ฐฐ์ด์ํฌ๊ธฐ๋0~10์ด๋ฏ๋ก ์์ ์์น๋ฅผ +5๋ก ์ก์์ค๋ค.
int nextX = 5;
int nextY = 5;
int index = 0;
for(int i=0; i<dirs.length(); i++){
// ์บ๋ฆญํฐ์ ํ์ฌ ์์น ์ ์ฅ
x = nextX;
y = nextY;
if(dirs.charAt(i) == 'U')
index = 0;
else if(dirs.charAt(i) == 'D')
index = 1;
else if(dirs.charAt(i) == 'R')
index = 2;
else if(dirs.charAt(i) == 'L')
index = 3;
// U, D, R, L์ ๋ง๋ ์บ๋ฆญํฐ ์์น ์ด๋
nextX += dx[index];
nextY += dy[index];
// ์ด์ ์ ์์ง์ธ ๋ฒ์์ ์ํด ์บ๋ฆญํฐ์ ์์น๊ฐ ์ง๋๋ฅผ ๋ฒ์ด๋ฌ์ ๊ฒฝ์ฐ
if(nextX < 0 || nextY < 0 || nextX > 10 || nextY > 10){
// ๋ค์ ์บ๋ฆญํฐ๋ฅผ ์ ์ ์์น๋ก ์ด๋
nextX -= dx[index];
nextY -= dy[index];
continue;
}
// ์บ๋ฆญํฐ๊ฐ ์ฒ์ ๊ฑธ์ด๋ณธ ๊ธธ์ผ๊ฒฝ์ฐ
if(!visit[x][y][nextX][nextY] && !visit[nextX][nextY][x][y]){
// ๊ฑธ์ด์จ ๊ธธ ์ฒดํฌ(์ ์ด ์๋ ๊ธธ์ด๊ธฐ ๋๋ฌธ์ ์๋ฐฉํฅ์ผ๋ก ์ฒดํฌํ๋ค.)
visit[x][y][nextX][nextY] = true;
visit[nextX][nextY][x][y] = true;
answer ++;
}
}
return answer;
}
}
ํ์ด
U: ์์ชฝ์ผ๋ก ํ์นธ
D: ์๋์ชฝ์ผ๋ก ํ์นธ
R: ์ค๋ฅธ์ชฝ์ผ๋ก ํ์นธ
L: ์ผ์ชฝ์ผ๋ก ํ์นธ
๋ฌธ์ ์์ ์ฃผ์ด์ง ๊ทธ๋๋ก ํด๊ฒฐํ๋ฉด ๋๋ค.
๋จผ์ ์บ๋ฆญํฐ๊ฐ ์์ง์ผ์ ์๋ ↑(y+1) , ↓(y-1) , →(x+1) , ←(x-1) ๋ฐฉํฅ์ ๋ง๊ฒ dx, dy ๋ฐฐ์ด์ ์ ์ธํด์ฃผ๊ณ ,
๋งต์ -5๋ถํฐ 5๊น์ง์ด์ง๋ง ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ 0๋ถํฐํ๋ฏ๋ก, +5์ฉ ๋ํด์ 0~10๊น์ง ๋งต์ ์ค์ ํ
4์ฐจ์ boolean ๋ฐฐ์ด์ ์ ์ธํด ์ฃผ์๋ค.[ํ์ฌ์์น(2์ฐจ์), ์ด๋์์น(2์ฐจ์) ์ฒดํฌ๋ฅผ ํด์ผํ๋ค.]
public static int[] dx = {0, 0, 1, -1};
public static int[] dy = {-1, 1, 0, 0};
// ๋งต์ ํฌ๊ธฐ = -5 ~ 5๊น์ง์ด๋ฏ๋ก 11x11
public static boolean[][][][] visit = new boolean[11][11][11][11];
๊ทธ ํ ์บ๋ฆญํฐ์ ํ์ฌ ์์น๋ฅผ ์ ์ฅํ ๋ณ์(x,y) ์ ์ด๋ ํ ์์น๋ฅผ ์ ์ฅํ ๋ณ์(nx, ny)์ ์ ์ธํ๋ค.
์ด๋ ๋งต์ ์ฐ์ธก์ผ๋ก 5์นธ์ฉ ์ด๋ํ์ผ๋ฏ๋ก, ์ด๋ํ์ ๋ณ์ ์ด๊ธฐ๊ฐ์ 5๋ก ์ค์ ํ๋ค.
์ด์ ์ฃผ์ด์ง ๋ฌธ์์ด์ ๊ฐ ๋ฌธ์๋ฅผ ๊ธฐ์ค์ผ๋ก ํ์์ ์์ํ๋ค.
์บ๋ฆญํฐ์ ํ์ฌ ์์น๋ (5,5) ์ด๋ฏ๋ก x, y ๊ฐ์ ์ค์ ํ๋ค.
x = nx;
y = ny;
๊ทธ ํ ๊ฐ ๋ฌธ์๊ฐ U, D, R, L์ ๋ฐ๋ผ ์์์ ์ค์ ํ dx, dy์ ์ธ๋ฑ์ค์ ๋ง๊ฒ 0, 1, 2, 3๋ก ์ ์ฅํ๊ณ , ์บ๋ฆญํฐ์ ์์น๋ฅผ ์ด๋์ํจ๋ค.
๋ง์ฝ ์บ๋ฆญํฐ์ ์ด๋ ์์น๊ฐ ๋งต์ ๋ฒ์ด๋ฌ์ ๊ฒฝ์ฐ(๋งต์ ๋ฒ์๋ 0 ~ 10๊น์ง)
์ด์ ์ ์ด๋์ํจ ์บ๋ฆญํฐ๋ฅผ ์์์น ์ํจ๋ค.
๋ค์์ผ๋ก ์บ๋ฆญํฐ๊ฐ ์ฒ์ ์๋ ๊ธธ์ธ๊ฒฝ์ฐ, ์ด์ ์ ๊ธธ + ํ์ฌ์ ๊ธธ ๋ชจ๋ ์ฒดํฌํ์๋ฅผ ํ๋ค.
* *
๋งต์ ํฌ๊ธฐ๋ 10x10์ด๊ณ , ์ฒ์์๋ ์๋ฌด ์๊ฐ์์ด ๋ก๋ด์ด ์ด๋ํ๋ ์์น๋ฅผ 2์ฐจ์ boolean ๋ฐฐ์ด์ ์ฒดํฌํด์ฃผ๊ณ ,
๋ง์ฝ ์ฒดํฌ๋์ด ์๋ ๊ธธ์ผ๊ฒฝ์ฐ ๊ธธ์ด๋ฅผ ์ค์ด๋ ๋ฐฉ์์ผ๋ก ํด๊ฒฐํ๋ ค๊ณ ํ๋๋ฐ,,
๋น์ฐํ ๋ฐฐ์ด์๋ ๋ง์ด๋์ค ์ธ๋ฑ์ค๊ฐ ๋ค์ด๊ฐ ์ ์๋ค.
์ด ๋ฌธ์ ๋ฅผ ํ๋ฉด์ ์ขํํ๋ฉด๊ณผ 2์ฐจ์ํ๋ ฌ๊ณผ์ x, y์ถ ์ขํ๊ฐ์ด ์กฐ๊ธ ํท๊ฐ๋ ธ๋ค.
2์ฐจ์ ๋ฐฐ์ด์ ์ด๋ ์ + ์ด๋ ํ ์ฒดํฌ๋ฅผ 4์ฐจ์ ๋ฐฐ์ด๋ก ์ฒดํฌํด ์ค ์ ์๊ณ , ์ฃผ์ด์ง ๋ฌธ์ ์ ํ๋ฉด์ ์ฝ๊ฐ ์ด๋์์ผ์ ํ ์ ์๋๋ฒ์ ๋ฐฐ์ ๋ค.
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค[Java] - (Level3)์ต๊ณ ์ ์งํฉ (1) | 2020.03.17 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค[Java] - (Level3)ํ๋ ธ์ด์ ํ (0) | 2020.03.17 |
[Codeforces] 1005A: Tanya and Stairways (0) | 2020.03.17 |
ํ๋ก๊ทธ๋๋จธ์ค[Java] - (Level2)์์ ๋์งํ (0) | 2020.03.16 |
ํ๋ก๊ทธ๋๋จธ์ค[Java] - (Level2)์ฃผ์๊ฐ๊ฒฉ (0) | 2020.03.16 |
๋๊ธ