Dazzling 개발 노트
[이것이 취업을 위한 코딩테스트다] Ch04. 구현 - 게임 개발 (Java) 본문
문제
4 4
1 1 0
1 1 1 1
1 0 0 1
1 1 0 1
1 1 1 1
풀이/후기
백준 로봇청소기 문제와 굉장히 유사했다.
로봇청소기 문제 풀 때 BFS로 접근해서 아주 머리아프게 풀었던 기억이 있는데...
책에선 너무 쉬운 풀이로 되어 있어서 당황했다.
그래도 방향에 대한 접근은 처음에 풀 때보다 바로 감을 잡은 것 같다.
완벽히 생각해내서 풀이하지 못한 것은 또 현타가 오지만....
그래도 접근성이라도 비슷하게 가져갔으니 전보단 나아졌다 생각해야지...
코드
package ThisIsCT;
import java.io.*;
import java.util.*;
public class ch04_04 {
// Ch.04 구현
// 게임 개발
// 백준 - 14503. 로봇청소기와 유사한 문제
static int N, M;
static int[][] map;
static int x,y,d;
//북(0) 동(1) 남(2) 서(3)
//서(좌) 북(상) 동(우) 남(하)
static int[][] move = {{-1,0}, {0,1}, {1,0}, {0,-1}};
static int cnt = 0;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer str = new StringTokenizer(br.readLine(), " ");
N = Integer.parseInt(str.nextToken());
M = Integer.parseInt(str.nextToken());
map = new int[N+1][M+1];
str = new StringTokenizer(br.readLine(), " ");
x = Integer.parseInt(str.nextToken());
y = Integer.parseInt(str.nextToken());
d = Integer.parseInt(str.nextToken());
for (int i=0; i<N; i++) {
str = new StringTokenizer(br.readLine(), " ");
for (int j=0; j<M; j++) {
map[i][j] = Integer.parseInt(str.nextToken());
}
}
map[x][y] = 99;
cnt++;
movingFunc(d, 0);
System.out.println(cnt);
}
static void movingFunc(int D, int tempCnt) {
int tempX = x + move[D][0];
int tempY = y + move[D][1];
if (map[tempX][tempY] != 1 && map[tempX][tempY] == 0) {
// 바다가 아니면서 아직 방문하지 않은 육지인 경우
map[tempX][tempY] = 99; //방문하면 99로 채움
x = tempX;
y = tempY;
cnt++;
tempCnt = 0;
} else {
// 방문할 곳이 없는 경우
tempCnt++;
//왼쪽으로 회전 시 D가 점차 작아짐 : 0 > 3 > 2 > 1 > 0 ...
D--;
if (D < 0) D = 3;
}
if (tempCnt == 4) {
//네 방향 모두 방문할 수 없는 경우 뒤로 이동
tempX = x - move[D][0];
tempY = y - move[D][1];
tempCnt = 0;
if (map[tempX][tempY] != 1 && map[tempX][tempY] == 0) {
x = tempX;
y = tempY;
} else {
return;
}
}
movingFunc(D, tempCnt);
}
}
Commit
https://github.com/allrightDJ0108/CodingTestStudy/commit/973c89505e940766de9bbb57004289826552deb5
이것이 취업을 위한 코딩테스트다 Ch04. 구현 - 게임 개발 · allrightDJ0108/CodingTestStudy@973c895
allrightDJ0108 committed Jul 13, 2023
github.com