https://programmers.co.kr/learn/courses/30/lessons/67259
๋ฌธ์ ์ค๋ช
๊ฑด์คํ์ฌ์ ์ค๊ณ์ฌ์ธ ์ฃ ๋ฅด๋๋ ๊ณ ๊ฐ์ฌ๋ก๋ถํฐ ์๋์ฐจ ๊ฒฝ์ฃผ๋ก ๊ฑด์ค์ ํ์ํ ๊ฒฌ์ ์ ์๋ขฐ๋ฐ์์ต๋๋ค.
์ ๊ณต๋ ๊ฒฝ์ฃผ๋ก ์ค๊ณ ๋๋ฉด์ ๋ฐ๋ฅด๋ฉด ๊ฒฝ์ฃผ๋ก ๋ถ์ง๋ N x N ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ ๊ฒฉ์ ํํ์ด๋ฉฐ ๊ฐ ๊ฒฉ์๋ 1 x 1 ํฌ๊ธฐ์
๋๋ค.
์ค๊ณ ๋๋ฉด์๋ ๊ฐ ๊ฒฉ์์ ์นธ์ 0 ๋๋ 1 ๋ก ์ฑ์์ ธ ์์ผ๋ฉฐ, 0์ ์นธ์ด ๋น์ด ์์์ 1์ ํด๋น ์นธ์ด ๋ฒฝ์ผ๋ก ์ฑ์์ ธ ์์์ ๋ํ๋
๋๋ค.
๊ฒฝ์ฃผ๋ก์ ์ถ๋ฐ์ ์ (0, 0) ์นธ(์ข์ธก ์๋จ)์ด๋ฉฐ, ๋์ฐฉ์ ์ (N-1, N-1) ์นธ(์ฐ์ธก ํ๋จ)์
๋๋ค. ์ฃ ๋ฅด๋๋ ์ถ๋ฐ์ ์ธ (0, 0) ์นธ์์ ์ถ๋ฐํ ์๋์ฐจ๊ฐ ๋์ฐฉ์ ์ธ (N-1, N-1) ์นธ๊น์ง ๋ฌด์ฌํ ๋๋ฌํ ์ ์๊ฒ ์ค๊ฐ์ ๋๊ธฐ์ง ์๋๋ก ๊ฒฝ์ฃผ๋ก๋ฅผ ๊ฑด์คํด์ผ ํฉ๋๋ค.
๊ฒฝ์ฃผ๋ก๋ ์, ํ, ์ข, ์ฐ๋ก ์ธ์ ํ ๋ ๋น ์นธ์ ์ฐ๊ฒฐํ์ฌ ๊ฑด์คํ ์ ์์ผ๋ฉฐ, ๋ฒฝ์ด ์๋ ์นธ์๋ ๊ฒฝ์ฃผ๋ก๋ฅผ ๊ฑด์คํ ์ ์์ต๋๋ค.
์ด๋, ์ธ์ ํ ๋ ๋น ์นธ์ ์ํ ๋๋ ์ข์ฐ๋ก ์ฐ๊ฒฐํ ๊ฒฝ์ฃผ๋ก๋ฅผ ์ง์ ๋๋ก ๋ผ๊ณ ํฉ๋๋ค.
๋ํ ๋ ์ง์ ๋๋ก๊ฐ ์๋ก ์ง๊ฐ์ผ๋ก ๋ง๋๋ ์ง์ ์ ์ฝ๋ ๋ผ๊ณ ๋ถ๋ฆ
๋๋ค.
๊ฑด์ค ๋น์ฉ์ ๊ณ์ฐํด ๋ณด๋ ์ง์ ๋๋ก ํ๋๋ฅผ ๋ง๋ค ๋๋ 100์์ด ์์๋๋ฉฐ, ์ฝ๋๋ฅผ ํ๋ ๋ง๋ค ๋๋ 500์์ด ์ถ๊ฐ๋ก ๋ญ๋๋ค.
์ฃ ๋ฅด๋๋ ๊ฒฌ์ ์ ์์ฑ์ ์ํด ๊ฒฝ์ฃผ๋ก๋ฅผ ๊ฑด์คํ๋ ๋ฐ ํ์ํ ์ต์ ๋น์ฉ์ ๊ณ์ฐํด์ผ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ์๋ ๊ทธ๋ฆผ์ ์ง์ ๋๋ก 6๊ฐ์ ์ฝ๋ 4๊ฐ๋ก ๊ตฌ์ฑ๋ ์์์ ๊ฒฝ์ฃผ๋ก ์์์ด๋ฉฐ, ๊ฑด์ค ๋น์ฉ์ 6 x 100 + 4 x 500 = 2600์ ์ ๋๋ค.
๋ ๋ค๋ฅธ ์๋ก, ์๋ ๊ทธ๋ฆผ์ ์ง์ ๋๋ก 4๊ฐ์ ์ฝ๋ 1๊ฐ๋ก ๊ตฌ์ฑ๋ ๊ฒฝ์ฃผ๋ก์ด๋ฉฐ, ๊ฑด์ค ๋น์ฉ์ 4 x 100 + 1 x 500 = 900์ ์ ๋๋ค.
๋๋ฉด์ ์ํ(0์ ๋น์ด ์์, 1์ ๋ฒฝ)์ ๋ํ๋ด๋ 2์ฐจ์ ๋ฐฐ์ด board๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๊ฒฝ์ฃผ๋ก๋ฅผ ๊ฑด์คํ๋๋ฐ ํ์ํ ์ต์ ๋น์ฉ์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ ์ฌํญ
- board๋ 2์ฐจ์ ์ ์ฌ๊ฐ ๋ฐฐ์ด๋ก ๋ฐฐ์ด์ ํฌ๊ธฐ๋ 3 ์ด์ 25 ์ดํ์ ๋๋ค.
- board ๋ฐฐ์ด์ ๊ฐ ์์์ ๊ฐ์ 0 ๋๋ 1 ์
๋๋ค.
- ๋๋ฉด์ ๊ฐ์ฅ ์ผ์ชฝ ์๋จ ์ขํ๋ (0, 0)์ด๋ฉฐ, ๊ฐ์ฅ ์ฐ์ธก ํ๋จ ์ขํ๋ (N-1, N-1) ์ ๋๋ค.
- ์์์ ๊ฐ 0์ ์นธ์ด ๋น์ด ์์ด ๋๋ก ์ฐ๊ฒฐ์ด ๊ฐ๋ฅํจ์ 1์ ์นธ์ด ๋ฒฝ์ผ๋ก ์ฑ์์ ธ ์์ด ๋๋ก ์ฐ๊ฒฐ์ด ๋ถ๊ฐ๋ฅํจ์ ๋ํ๋ ๋๋ค.
- board๋ ํญ์ ์ถ๋ฐ์ ์์ ๋์ฐฉ์ ๊น์ง ๊ฒฝ์ฃผ๋ก๋ฅผ ๊ฑด์คํ ์ ์๋ ํํ๋ก ์ฃผ์ด์ง๋๋ค.
- ์ถ๋ฐ์ ๊ณผ ๋์ฐฉ์ ์นธ์ ์์์ ๊ฐ์ ํญ์ 0์ผ๋ก ์ฃผ์ด์ง๋๋ค.
ํ์ด
์ฒ์์๋ ๊ทธ๋ฅ BFS๋ก ํ์๋๋ฐ, ๋ค ์ ๋ง๋๋ฏ.... ํ๋๋ 25๋ฒ์์ ์ฅ๋ ฌํ๊ฒ ์คํจ๐ฅถ
๋๋์ฒด ์ค๋ ๋ญ๊ธธ๋....;; ํ๋ ์ค โผ๏ธ
board = [
[0, 0, 0, 0, 0],
[0, 1, 1, 1, 0],
[0, 0, 1, 0, 0],
[1, 0, 0, 0, 1],
[0, 1, 1, 0, 0]
];
์ด๊ฒ์ด ๋ฌธ์ ์์ ์๊ฒ๋จโผ๏ธ์ฌ์ค ์ง๋ฌธ ์ฐธ๊ณ ใ
..
์ฒ์ [0, 0] ์์ 1๏ธโฃ์ค๋ฅธ์ชฝ์ผ๋ก ๊ฐ๋ ๊ฒฝ์ฐ์ 2๏ธโฃ์ผ์ชฝ์ผ๋ก ๊ฐ๋ ๊ฒฝ์ฐ ๊ฐ ์๋๋ฐ, ๊ฒฐ๊ณผ์ ์ผ๋ก๋ 1๏ธโฃ๋ฒ์ด ๋ ์ ์ ๋น์ฉ (3000)์ด ๋์ค์ง๋ง, ํ ๋ฒ BFS ๋๋ฆฐ ๊ฐ์ผ๋ก๋ 2๏ธโฃ๋ฒ์ธ 3300์ด ๋์จ๋ค.....์ด ๋ ๊ฒฝ์ฐ๋ [3, 3] ์ ๊ณตํต์ผ๋ก ์ง๋๋๋ฐ, ์ด ์ง์ ์์ 1๏ธโฃ๋ฒ (1800) , 2๏ธโฃ๋ฒ (1600) ์ผ๋ก 1๏ธโฃ๋ฒ์ ๋ ธ๋๋ค์ด ๋ ์ด์ ํ์ ๋ค์ด์ค์ง ๋ชปํ๊ณ 2๏ธโฃ๋ฒ์ผ๋ก ์๋ชป๋ ๋ต์ด ๋์๋ ๊ฒโผ๏ธ
๊ทธ๋์ ์ฌ์ฉํ ๋ฐฉ๋ฒ์ BFS๋ฅผ ์ค๋ฅธ์ชฝ ๋ฐฉํฅ / ์๋์ชฝ ๋ฐฉํฅ ์ผ๋ก ๋ ๋ฒ ๋๋ ค์ฃผ์๋ค. ๐คทโ๏ธ๋ญ๊ฐ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ์๋ค๋๋ฐ ๋ชจ๋ฅด๊ฒ ๋ค๋ฆฌ....;;๐คฆโ๏ธ
์ฝ๋
import java.util.LinkedList;
import java.util.Queue;
public class ๊ฒฝ์ฃผ๋ก๊ฑด์ค {
static int[] dx = {-1,0,0,1}; // ์ ์ข ์ฐ ํ
static int[] dy = {0,-1,1,0};
static boolean[][] isVisited;
static int[][] costs;
static int answer;
static int n;
public static class road{
int x;
int y;
int dir;
int cost;
road(int x, int y, int dir, int cost){
this.x = x;
this.y = y;
this.dir = dir;
this.cost = cost;
}
}
public static int solution(int[][] board) {
answer = Integer.MAX_VALUE;
costs = board;
n = board.length;
isVisited = new boolean[n][n];
// ์ฒ์ ์์๋ ๋ฐ์ผ๋ก & ์ค๋ฅธ์ชฝ์ผ๋ก ๋๊ฐ์ง ๊ฒฝ์ฐ
BFS(0, 0, 2, 0);
BFS(0, 0, 3, 0);
return answer;
}
private static void BFS(int x, int y, int dir, int cost) {
Queue<road> q = new LinkedList<>();
q.add(new road(x,y,dir,cost));
isVisited[x][y] = true;
while(!q.isEmpty()){
road r = q.poll();
int nowX = r.x;
int nowY = r.y;
int nowD = r.dir;
int nowC = r.cost;
if(nowX == n-1 && nowY == n-1){
answer = Math.min(answer, nowC);
}
for(int i = 0 ; i < 4; i++){
int nextX = nowX + dx[i];
int nextY = nowY + dy[i];
int nextD = i;
int nextC = nowC;
if(nextX < 0 || n <= nextX || nextY < 0 || n <= nextY || costs[nextX][nextY] == 1)
continue;
if(nextD == nowD){
nextC += 100;
}
else
nextC += 600;
if(!isVisited[nextX][nextY] || costs[nextX][nextY] >= nextC){
isVisited[nextX][nextY] = true;
costs[nextX][nextY] = nextC;
q.offer(new road(nextX, nextY, nextD, nextC));
}
}
}
}
public static void main(String[] args) {
int[][] board = {
{0, 0, 0, 0, 0},
{0, 1, 1, 1, 0},
{0, 0, 1, 0, 0},
{1, 0, 0, 0, 1},
{0, 1, 1, 0, 0}
};
System.out.println(solution(board));
}
}
'์๊ณ ๋ฆฌ์ฆ > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ ํ๋ก๊ทธ๋๋จธ์ค / Programmers Level 3 ] ๋ฒ ์คํธ ์จ๋ฒ (JAVA / ์๋ฐ) (0) | 2021.10.01 |
---|---|
[ ํ๋ก๊ทธ๋๋จธ์ค / Programmers Level 3 ] ๋ณดํ์ ์ฒ๊ตญ (0) | 2021.09.30 |
[ ํ๋ก๊ทธ๋๋จธ์ค / Programmers Level 3 ] ํฉ์น ํ์ ์๊ธ (0) | 2021.09.30 |
[ ํ๋ก๊ทธ๋๋จธ์ค / Programmers Level 3 ] ๋จ์ด ๋ณํ (0) | 2021.09.29 |
[ ํ๋ก๊ทธ๋๋จธ์ค / Programmers Level 3 ] ๋ฑ๊ตฃ๊ธธ (0) | 2021.09.29 |