๐ ๋ฌธ์
https://www.acmicpc.net/problem/14503
๋ฌธ์
๋ก๋ด ์ฒญ์๊ธฐ๊ฐ ์ฃผ์ด์ก์ ๋, ์ฒญ์ํ๋ ์์ญ์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
๋ก๋ด ์ฒญ์๊ธฐ๊ฐ ์๋ ์ฅ์๋ N×M ํฌ๊ธฐ์ ์ง์ฌ๊ฐํ์ผ๋ก ๋ํ๋ผ ์ ์์ผ๋ฉฐ, 1×1ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ ์นธ์ผ๋ก ๋๋์ด์ ธ ์๋ค. ๊ฐ๊ฐ์ ์นธ์ ๋ฒฝ ๋๋ ๋น ์นธ์ด๋ค. ์ฒญ์๊ธฐ๋ ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ์ด ์์ผ๋ฉฐ, ์ด ๋ฐฉํฅ์ ๋, ์, ๋จ, ๋ถ์ค ํ๋์ด๋ค. ์ง๋์ ๊ฐ ์นธ์ (r, c)๋ก ๋ํ๋ผ ์ ์๊ณ , r์ ๋ถ์ชฝ์ผ๋ก๋ถํฐ ๋จ์ด์ง ์นธ์ ๊ฐ์, c๋ ์์ชฝ์ผ๋ก ๋ถํฐ ๋จ์ด์ง ์นธ์ ๊ฐ์์ด๋ค.
๋ก๋ด ์ฒญ์๊ธฐ๋ ๋ค์๊ณผ ๊ฐ์ด ์๋ํ๋ค.
- ํ์ฌ ์์น๋ฅผ ์ฒญ์ํ๋ค.
- ํ์ฌ ์์น์์ ํ์ฌ ๋ฐฉํฅ์ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ ๋ฐฉํฅ๋ถํฐ ์ฐจ๋ก๋๋ก ์ธ์ ํ ์นธ์ ํ์ํ๋ค.
- ์ผ์ชฝ ๋ฐฉํฅ์ ์์ง ์ฒญ์ํ์ง ์์ ๊ณต๊ฐ์ด ์กด์ฌํ๋ค๋ฉด, ๊ทธ ๋ฐฉํฅ์ผ๋ก ํ์ ํ ๋ค์ ํ ์นธ์ ์ ์งํ๊ณ 1๋ฒ๋ถํฐ ์งํํ๋ค.
- ์ผ์ชฝ ๋ฐฉํฅ์ ์ฒญ์ํ ๊ณต๊ฐ์ด ์๋ค๋ฉด, ๊ทธ ๋ฐฉํฅ์ผ๋ก ํ์ ํ๊ณ 2๋ฒ์ผ๋ก ๋์๊ฐ๋ค.
- ๋ค ๋ฐฉํฅ ๋ชจ๋ ์ฒญ์๊ฐ ์ด๋ฏธ ๋์ด์๊ฑฐ๋ ๋ฒฝ์ธ ๊ฒฝ์ฐ์๋, ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ์ ์ ์งํ ์ฑ๋ก ํ ์นธ ํ์ง์ ํ๊ณ 2๋ฒ์ผ๋ก ๋์๊ฐ๋ค.
- ๋ค ๋ฐฉํฅ ๋ชจ๋ ์ฒญ์๊ฐ ์ด๋ฏธ ๋์ด์๊ฑฐ๋ ๋ฒฝ์ด๋ฉด์, ๋ค์ชฝ ๋ฐฉํฅ์ด ๋ฒฝ์ด๋ผ ํ์ง๋ ํ ์ ์๋ ๊ฒฝ์ฐ์๋ ์๋์ ๋ฉ์ถ๋ค.
๋ก๋ด ์ฒญ์๊ธฐ๋ ์ด๋ฏธ ์ฒญ์๋์ด์๋ ์นธ์ ๋ ์ฒญ์ํ์ง ์์ผ๋ฉฐ, ๋ฒฝ์ ํต๊ณผํ ์ ์๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ธ๋ก ํฌ๊ธฐ N๊ณผ ๊ฐ๋ก ํฌ๊ธฐ M์ด ์ฃผ์ด์ง๋ค. (3 ≤ N, M ≤ 50)
๋์งธ ์ค์ ๋ก๋ด ์ฒญ์๊ธฐ๊ฐ ์๋ ์นธ์ ์ขํ (r, c)์ ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ d๊ฐ ์ฃผ์ด์ง๋ค. d๊ฐ 0์ธ ๊ฒฝ์ฐ์๋ ๋ถ์ชฝ์, 1์ธ ๊ฒฝ์ฐ์๋ ๋์ชฝ์, 2์ธ ๊ฒฝ์ฐ์๋ ๋จ์ชฝ์, 3์ธ ๊ฒฝ์ฐ์๋ ์์ชฝ์ ๋ฐ๋ผ๋ณด๊ณ ์๋ ๊ฒ์ด๋ค.
์ ์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ์ฅ์์ ์ํ๊ฐ ๋ถ์ชฝ๋ถํฐ ๋จ์ชฝ ์์๋๋ก, ๊ฐ ์ค์ ์์ชฝ๋ถํฐ ๋์ชฝ ์์๋๋ก ์ฃผ์ด์ง๋ค. ๋น ์นธ์ 0, ๋ฒฝ์ 1๋ก ์ฃผ์ด์ง๋ค. ์ง๋์ ์ฒซ ํ, ๋ง์ง๋ง ํ, ์ฒซ ์ด, ๋ง์ง๋ง ์ด์ ์๋ ๋ชจ๋ ์นธ์ ๋ฒฝ์ด๋ค.
๋ก๋ด ์ฒญ์๊ธฐ๊ฐ ์๋ ์นธ์ ์ํ๋ ํญ์ ๋น ์นธ์ด๋ค.
์ถ๋ ฅ
๋ก๋ด ์ฒญ์๊ธฐ๊ฐ ์ฒญ์ํ๋ ์นธ์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
โ๏ธ ํ์ด
์ ํ์ ์ธ ๊ณจ๋V ์์ค์ ์๋ฎฌ๋ ์ด์ ๋ฌธ์ ์ด๋ค.
์กฐ๊ฑด๋ง ์ฐจ๊ทผ์ฐจ๊ทผ ๋ฐ์ ธ์ ๋จ๊ณ๋ฅผ ๋ฐ์์ฃผ๋ฉด ์ฝ๊ฒ ํ์ด๋ผ ์ ์๋ค.
โ๏ธ ํ์ฌ ์์น๋ฅผ ์ฒญ์ํ ์ ์์ผ๋ฉด ์ฒญ์ํ๋ค.
โ๏ธ ์ผ์ชฝ ๋ฐฉํฅ๋ถํฐ ์ฐจ๋ก๋ก ์ฌ๋ฐฉ์ ํ์ธํ์ฌ, ์ด๋์ด ๊ฐ๋ฅํ ์์น๋ฅผ ํ์ธํ ํ ๊ฐ๋ฅํ๋ค๋ฉด ์ด๋ํ๋ค.
๐ก ๋ฐ๋ผ์ ์ฌ๋ฐฉ ํ์์ ์ํ ๋ฐฉํฅ ์ธ๋ฑ์ค ๋ฐฐ์ด(dr/dc)์ ์ธ๋ฑ์ค๋ฅผ +/- ํ ๋ ์ํ๋ ๋์๋จ๋ถ์ ์์๊ฐ ์ ์ง๋๋๋ก ์ง ๋ค. ๋ฌธ์ ์์ ์ ์ํ ๋ถ(0)-๋(1)-๋จ(2)-์(3)์ ๊ฒฝ์ฐ ์ธ๋ฑ์ค๋ฅผ ์ฐจ๋ก๋ก ๋ง์ด๋์ค ์ํฌ ๋ ์ํ๋ ์ผ์ชฝ ๋ฐฉํฅ ์์๊ฐ ์ ์ง๋๋ค.
โ๏ธ ์ฌ๋ฐฉ์ ํ์ธํด๋ ์ด๋ํ ์ ์๋ ๊ณณ์ด ์๋ค๋ฉด, ์กฐ๊ฑด๋๋ก ๋ณด๋ ๋ฐฉํฅ์ ์ ์งํ ์ฑ๋ก ํ ์นธ ๋ค๋ก ์ด๋ํ๋ค. ํ์ง๋ง์ ๋ถ๊ฐ๋ฅํ๋ค๋ฉด(๋ฒฝ์ ๋งํ๊ฑฐ๋ ๋ฐฐ์ด๋ฒ์๋ฅผ ๋ฒ์ด๋จ) ์๊ณ ๋ฆฌ์ฆ์ ์ข ๋ฃํ๋ค.
๐ป ์์ค์ฝ๋: ์๋ฐ(Java)
public class Main_๋ฐฑ์ค_14503_๋ก๋ด์ฒญ์๊ธฐ_๊ณจ๋V {
// 0:๋ถ, 1:๋, 2:๋จ, 3:์
static int[] dr = {-1, 0, 1, 0};
static int[] dc = {0, 1, 0, -1};
static int[][] map;
static int N, M, r, c, d, cnt=0;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
//N,M
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
//robot
st = new StringTokenizer(br.readLine());
r = Integer.parseInt(st.nextToken());
c = Integer.parseInt(st.nextToken());
d = Integer.parseInt(st.nextToken());
//map
map = new int[N][M];
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < M; j++) {
// 0:๋น ์นธ, 1:๋ฒฝ
map[i][j] = Integer.parseInt(st.nextToken());
}
}//input
clean();
System.out.println(cnt);
}//end of main
private static void clean() {
while(true) {
if(map[r][c]==0) {// ํ์ฌ ์์น๊ฐ ์ฒญ์๊ฐ ๋์ด์์ง ์์ ์นธ์ด๋ผ๋ฉด
map[r][c] = 2;
cnt++;
}
if(!move(r, c, d)) {// ์ด๋ ์๋ ํ, ์ด๋์ด ์๋์ผ๋ฉด
//ํ์ง ํ์ธ
if(!back(r,c,d)) break;
}
}
}//clean
private static boolean move(int r0, int c0, int d0) {
int nr, nc, nd = d0;
for (int i = 1; i <= 4; i++) { // ์ผ์ชฝ๋ถํฐ ๋ค๋ฐฉํฅ ํ์ธ
nd = nd-1<0?3:nd-1;
nr = r0+dr[nd];
nc = c0+dc[nd];
//๋ค ๋ฐฉํฅ ๋ชจ๋ ์ฒญ์๊ฐ ์ด๋ฏธ ๋์ด์๊ฑฐ๋ ๋ฒฝ์ธ ๊ฒฝ์ฐ->์ด๋ ๋ถ๊ฐ
if(nr<0||nr>=N||nc<0||nc>=M||map[nr][nc]==1||map[nr][nc]==2) continue;
//์ด๋ ๊ฐ๋ฅ->์
๋ฐ์ดํธ
r = nr;
c = nc;
d = nd;
return true;
}
return false;
}//move
private static boolean back(int r0, int c0, int d0) {
int nr, nc, nd= d0-1<0?3:d0-1;
nd = nd-1<0?3:nd-1; //ํ์งํด์ผ ํ๋ ๋ฐฉํฅ(๋ ๋ฒ ์ผ์ชฝ์ผ๋ก ๋๋ฆฌ๊ธฐ)
nr = r0+dr[nd];
nc = c0+dc[nd];
if(nr<0||nr>=N||nc<0||nc>=M||map[nr][nc]==1) return false;
else {
// ๋ฒฝ์ด ์๋๋ฉด, ๋ณด๊ณ ์๋ ๋ฐฉํฅ(d)์ ๋๊ณ ์์น๋ง ํ์งํ๋ค.
r = nr;
c = nc;
return true;
}
}//back
}//end of class
๐ ๐ ๐
๏ผฐ๏ฝ๏ฝ๏ฝ๏ฝ ๏ฝ ๏ผข๏ฝ ๏ผณ๏ผก๏ผน
๐๐ฉ๐ข๐ฏ๐ฌ๐ด ๐ง๐ฐ๐ณ ๐ณ๐ฆ๐ข๐ฅ๐ช๐ฏ๐จ