728x90
https://www.acmicpc.net/problem/14503
삼성 코테가 잠시 생각나는 문제였다,,
삼성 문제들에 비해선 매우 간단한 문제지만 반시계 방향 회전이라는 말과 친절한 설명에 잠심 스쳐지나갔다 ㅠㅠ
문제 설명대로 구현만 하면 간단하게 해결 가능한 문제였다!
문제 길이에 겁 먹지 맙시당 ㅎㅎ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int n, m, count = 0;
static int r, c, d;
static int[] dx = { -1, 0, 1, 0 };
static int[] dy = { 0, 1, 0, -1 };
static int[][] arr;
static boolean[][] visited;
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()); // 0:북 , 1:동 , 2:남, 3:서
visited = new boolean[n][m];
arr = new int[n][m];
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < m; j++) {
arr[i][j] = Integer.parseInt(st.nextToken());
}
}
while (true) {
clean(r, c);
switch (findRound(r, c, d)) {
case 1:
d = d - 1 < 0 ? 3 : d - 1;
if (arr[r + dx[d]][c + dy[d]] == 0) {
r = r + dx[d];
c = c + dy[d];
}
break;
case 0:
int behind = d;
switch (d) {
case 1:
behind = 3;
break;
case 2:
behind = 0;
break;
case 3:
behind = 1;
break;
case 0:
behind = 2;
break;
}
r = r + dx[behind];
c = c + dy[behind];
if (arr[r][c] == 1) {
System.out.println(count);
return;
}
break;
}
}
}
static void clean(int x, int y) {
if (arr[x][y] == 0) {
arr[x][y] = 2;
count++;
}
}
static int findRound(int x, int y, int dir) {
for (int i = 0; i < 4; i++) {
int xx = x + dx[i];
int yy = y + dy[i];
if (xx < 0 || yy < 0 || xx >= n || yy >= m || visited[xx][yy])
continue;
if (arr[xx][yy] == 0)
return 1;
}
return 0;
}
}
'Java' 카테고리의 다른 글
[백준 17266] 어두운 굴다리 (JAVA) (0) | 2023.04.20 |
---|---|
[백준 9205] 맥주 마시면서 걸어가기 (JAVA) (0) | 2023.04.20 |
[백준 2468] 안전 영역 (JAVA) (0) | 2023.04.19 |
[백준 2410] 2의 멱수의 합 (JAVA) (1) | 2023.04.18 |
[백준 1911] 흙길 보수하기 (JAVA) (1) | 2023.04.18 |