๐ ๋ฌธ์
https://www.acmicpc.net/problem/14499
๋ฌธ์
ํฌ๊ธฐ๊ฐ N×M์ธ ์ง๋๊ฐ ์กด์ฌํ๋ค. ์ง๋์ ์ค๋ฅธ์ชฝ์ ๋์ชฝ, ์์ชฝ์ ๋ถ์ชฝ์ด๋ค. ์ด ์ง๋์ ์์ ์ฃผ์ฌ์๊ฐ ํ๋ ๋์ฌ์ ธ ์์ผ๋ฉฐ, ์ฃผ์ฌ์์ ์ ๊ฐ๋๋ ์๋์ ๊ฐ๋ค. ์ง๋์ ์ขํ๋ (r, c)๋ก ๋ํ๋ด๋ฉฐ, r๋ ๋ถ์ชฝ์ผ๋ก๋ถํฐ ๋จ์ด์ง ์นธ์ ๊ฐ์, c๋ ์์ชฝ์ผ๋ก๋ถํฐ ๋จ์ด์ง ์นธ์ ๊ฐ์์ด๋ค.
2 4 1 3 5 6
์ฃผ์ฌ์๋ ์ง๋ ์์ ์ ๋ฉด์ด 1์ด๊ณ , ๋์ชฝ์ ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ์ด 3์ธ ์ํ๋ก ๋์ฌ์ ธ ์์ผ๋ฉฐ, ๋์ฌ์ ธ ์๋ ๊ณณ์ ์ขํ๋ (x, y) ์ด๋ค. ๊ฐ์ฅ ์ฒ์์ ์ฃผ์ฌ์์๋ ๋ชจ๋ ๋ฉด์ 0์ด ์ ํ์ ธ ์๋ค.
์ง๋์ ๊ฐ ์นธ์๋ ์ ์๊ฐ ํ๋์ฉ ์ฐ์ฌ์ ธ ์๋ค. ์ฃผ์ฌ์๋ฅผ ๊ตด๋ ธ์ ๋, ์ด๋ํ ์นธ์ ์ฐ์ฌ ์๋ ์๊ฐ 0์ด๋ฉด, ์ฃผ์ฌ์์ ๋ฐ๋ฅ๋ฉด์ ์ฐ์ฌ ์๋ ์๊ฐ ์นธ์ ๋ณต์ฌ๋๋ค. 0์ด ์๋ ๊ฒฝ์ฐ์๋ ์นธ์ ์ฐ์ฌ ์๋ ์๊ฐ ์ฃผ์ฌ์์ ๋ฐ๋ฅ๋ฉด์ผ๋ก ๋ณต์ฌ๋๋ฉฐ, ์นธ์ ์ฐ์ฌ ์๋ ์๋ 0์ด ๋๋ค.
์ฃผ์ฌ์๋ฅผ ๋์ ๊ณณ์ ์ขํ์ ์ด๋์ํค๋ ๋ช ๋ น์ด ์ฃผ์ด์ก์ ๋, ์ฃผ์ฌ์๊ฐ ์ด๋ํ์ ๋ ๋ง๋ค ์๋จ์ ์ฐ์ฌ ์๋ ๊ฐ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ฃผ์ฌ์๋ ์ง๋์ ๋ฐ๊นฅ์ผ๋ก ์ด๋์ํฌ ์ ์๋ค. ๋ง์ฝ ๋ฐ๊นฅ์ผ๋ก ์ด๋์ํค๋ ค๊ณ ํ๋ ๊ฒฝ์ฐ์๋ ํด๋น ๋ช ๋ น์ ๋ฌด์ํด์ผ ํ๋ฉฐ, ์ถ๋ ฅ๋ ํ๋ฉด ์ ๋๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ง๋์ ์ธ๋ก ํฌ๊ธฐ N, ๊ฐ๋ก ํฌ๊ธฐ M (1 ≤ N, M ≤ 20), ์ฃผ์ฌ์๋ฅผ ๋์ ๊ณณ์ ์ขํ x, y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), ๊ทธ๋ฆฌ๊ณ ๋ช ๋ น์ ๊ฐ์ K (1 ≤ K ≤ 1,000)๊ฐ ์ฃผ์ด์ง๋ค.
๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ์ง๋์ ์ฐ์ฌ ์๋ ์๊ฐ ๋ถ์ชฝ๋ถํฐ ๋จ์ชฝ์ผ๋ก, ๊ฐ ์ค์ ์์ชฝ๋ถํฐ ๋์ชฝ ์์๋๋ก ์ฃผ์ด์ง๋ค. ์ฃผ์ฌ์๋ฅผ ๋์ ์นธ์ ์ฐ์ฌ ์๋ ์๋ ํญ์ 0์ด๋ค. ์ง๋์ ๊ฐ ์นธ์ ์ฐ์ฌ ์๋ ์๋ 10 ๋ฏธ๋ง์ ์์ฐ์ ๋๋ 0์ด๋ค.
๋ง์ง๋ง ์ค์๋ ์ด๋ํ๋ ๋ช ๋ น์ด ์์๋๋ก ์ฃผ์ด์ง๋ค. ๋์ชฝ์ 1, ์์ชฝ์ 2, ๋ถ์ชฝ์ 3, ๋จ์ชฝ์ 4๋ก ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ด๋ํ ๋๋ง๋ค ์ฃผ์ฌ์์ ์ ๋ฉด์ ์ฐ์ฌ ์๋ ์๋ฅผ ์ถ๋ ฅํ๋ค. ๋ง์ฝ ๋ฐ๊นฅ์ผ๋ก ์ด๋์ํค๋ ค๊ณ ํ๋ ๊ฒฝ์ฐ์๋ ํด๋น ๋ช ๋ น์ ๋ฌด์ํด์ผ ํ๋ฉฐ, ์ถ๋ ฅ๋ ํ๋ฉด ์ ๋๋ค.
โ๏ธ ํ์ด
ํ ๋ฒ ํ์ด๋๊ณ ๋๋ฉด, ๊ทธ ๋ค์๋ถํฐ๋ ์ฝ๊ฒ ํ์ด๋ผ ์ ์๋ ๋ฌธ์ ์ ํ์ด๋ค.
์ฃผ์ฌ์๋ฅผ ์ด๋ป๊ฒ ๊ตด๋ฆฌ๋๋?๊ฐ ๊ด๊ฑด์ด๋ค.
์ฌ์ค ํจ์ฌ ๋ ์ ์ฉํ๊ณ ๊ฐ๋จํ ์ฝ๋๊ฐ ์์ง๋ง, ๋๋ ์๋ ์ฝ๋๊ฐ ๋ ์ง๊ด์ ์ผ๋ก ์๋ฟ์์ ์ ๋ ๊ฒ ํ์๋ค. ๋ฐ๋ก, ํน์ ๋ฐฉํฅ์ผ๋ก ๊ตด๋ ธ์ ๋ ๋ฐ๋๋ 4๋ฉด์ ์ ๋ฐ์ดํธ ํด์ฃผ๋ ๊ฒ์ด๋ค. (๋ ๋ฉด์ ๋ฐ๋์ง ์๋๋ค)
์๋ฅผ ๋ค์ด ์ฃผ์ฌ์๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก ๊ตด๋ ธ์ ๋, ํ์ฌ ์ค๋ฅธ์ชฝ ๋ฉด์ ๊ฐ์ ๋ฐ๋ฅ ๋ฉด์ ๊ฐ์ผ๋ก ๊ฐ๊ณ , ๋ฐ๋ฅ ๋ฉด์ ๊ฐ์ ์ผ์ชฝ ๋ฉด์ ๊ฐ์ผ๋ก ๋ค์ด๊ฐ๋ค.
โ๏ธ ์ ๋ฆฌ
1. ์ ๋ ฅ๋ ๋ฐฉํฅ์ผ๋ก ์ด๋์ด ๊ฐ๋ฅํ์ง ์ฒดํฌํ๋ค. (ArrayOutOfBound)
2. ์ด๋์ด ๊ฐ๋ฅํ๋ฉด, ํด๋น ๋ฐฉํฅ์ผ๋ก ์ฃผ์ฌ์๋ฅผ ๊ตด๋ ธ์ ๋ ์๋ฎฌ๋ ์ด์ ์ผ๋ก 4๋ฉด์ ์ ๋ฐ์ดํธ ํ๋ค.
3. ์ ๋ฐ์ดํธ ๋ ๋ฐ๋ฅ๊ฐ์ ๋ฐํ์ผ๋ก ์กฐ๊ฑด ์ฐ์ฐ์ ์ํํ๋ค.
4. ์ด๋ํ ์์น๋ฅผ ํ์ฌ ์์น๋ก ์ ๋ฐ์ดํธ ํ๋ค.
5. ์ ๋ฐ์ดํธ ๋ ์๋ฉด์ ์ถ๋ ฅํ๋ค.
๐ป ์์ค์ฝ๋: ์๋ฐ(Java)
public class Main_๋ฐฑ์ค_14499_์ฃผ์ฌ์๊ตด๋ฆฌ๊ธฐ_๊ณจ๋IV {
// 1:๋, 2:์, 3:๋ถ, 4:๋จ
static int[] dx = {0, 0, 0, -1, 1};
static int[] dy = {0, 1, -1, 0, 0};
static int TOP = 0;
static int BOTTOM = 0;
static int UP = 0;
static int DOWN = 0;
static int LEFT = 0;
static int RIGHT = 0;
// a๊ฐ ๋ฐ๋ฅ์ผ ๋ ์๋จ b์ ๊ฐ: |7-a|
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());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
int K = 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());
}
}//input
st = new StringTokenizer(br.readLine());
int nx, ny;
for (int i = 0; i < K; i++) { // ์ฐ์ฐ์ ํ์
int d = Integer.parseInt(st.nextToken());
nx = x + dx[d];
ny = y + dy[d];
// ๊ตฌ๋ฅผ ์ ์๋ ๋ฐฉํฅ์ด๋ฉด ํจ์ค
if(nx<0||ny<0||nx>=N||ny>=M) continue;
//์ฃผ์ฌ์ ๊ตด๋ฆฌ๊ธฐ
rollDice(d);
//์ฐ์ฐ
if(map[nx][ny]==0) {
map[nx][ny] = BOTTOM;
}else {
BOTTOM = map[nx][ny];
map[nx][ny] = 0;
}
//๊ฐ ์
๋ฐ์ดํธ
x = nx;
y = ny;
//์ถ๋ ฅ
System.out.println(TOP);
}
}//end of main
private static void rollDice(int d) {
int temp=BOTTOM;
switch(d){
case 1://๋
BOTTOM = LEFT;
LEFT = TOP;
TOP = RIGHT;
RIGHT = temp;
break;
case 2://์
BOTTOM = RIGHT;
RIGHT = TOP;
TOP = LEFT;
LEFT = temp;
break;
case 3://๋ถ
BOTTOM = UP;
UP = TOP;
TOP = DOWN;
DOWN = temp;
break;
case 4://๋จ
BOTTOM = DOWN;
DOWN = TOP;
TOP = UP;
UP = temp;
break;
}
}
}//end of class
๐ ๐ ๐
๏ผฐ๏ฝ๏ฝ๏ฝ๏ฝ ๏ฝ ๏ผข๏ฝ ๏ผณ๏ผก๏ผน
๐๐ฉ๐ข๐ฏ๐ฌ๐ด ๐ง๐ฐ๐ณ ๐ณ๐ฆ๐ข๐ฅ๐ช๐ฏ๐จ