728x90
문제
https://www.acmicpc.net/problem/14503
풀이 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
static int[][] board;
static int n, m, r, c, d;
//dx[i], dy[i] : 현재 칸에서 i 방향으로 한칸 이동시 더해줄 x, y좌표
static int[] dx = {-1, 0, 1, 0};
static int[] dy = {0, 1, 0, -1};
public static int solution() {
int answer = 0;
while (true) {
//아직 청소가 안된 칸이라면 청소한다.
if (board[r][c] == 0) {
board[r][c] = 2;
answer++;
}
//true이면 회전중 청소 안된 칸 발견
boolean flag = false;
for (int i = 0; i < 4; i++) {
//왼쪽으로 회전
//현재 방향이 북쪽이면 서쪽으로 가야하기 때문에 3, 나머지 경우는 현재 방향에서 -1 하면 좌측 방향이다.
if (d == 0) {
d = 3;
} else {
d--;
}
int nx = r + dx[d];
int ny = c + dy[d];
//회전중 청소가 안된 칸을 발견하면 해당 칸으로 이동
if (board[nx][ny] == 0) {
r = nx;
c = ny;
flag = true;
break;
}
}
//네방향 모두 청소가 되어있거나 벽이면,
if (!flag) {
int nx = 0;
int ny = 0;
//후진 좌표 구하기
if (d == 0 || d == 1) {
nx = r + dx[d+2];
ny = c + dy[d+2];
} else {
nx = r + dx[d-2];
ny = c + dy[d-2];
}
//후진할 칸이 벽이라면 작동 정지
if (board[nx][ny] == 1) {
return answer;
}
//후진할 칸이 벽이 아니라면 해당 칸으로 이동
r = nx;
c = ny;
}
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
r = Integer.parseInt(st.nextToken());
c = Integer.parseInt(st.nextToken());
d = Integer.parseInt(st.nextToken());
board = new int[n][m];
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < m; j++) {
board[i][j] = Integer.parseInt(st.nextToken());
}
}
System.out.println(solution());
}
}
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[알고리즘/백준] 20055 컨베이어 벨트 위의 로봇 - 자바(Java), 삼성 SW 역량테스트, 구현 (0) | 2021.10.25 |
---|---|
[알고리즘/백준] 21608 상어 초등학교 - 자바(Java), 삼성 SW 역량테스트, 구현 (0) | 2021.10.20 |
[알고리즘/백준] 14500 테트로미노 - 삼성 SW 역량테스트, 자바(Java) (0) | 2021.10.18 |
[알고리즘/백준] 14502 연구소 - 자바(Java), DFS, BFS, 삼성 SW 역량테스트 기출 (0) | 2021.10.17 |
[알고리즘/백준] 3190 뱀 - 자바(Java), 덱(Deque), 삼성 SW 역량테스트 기출 (0) | 2021.10.14 |
댓글