백준 14503번 구현 문제를 Java로 풀지 못했다. 문제가 이해가 안된다. 결국 다른 사람 풀이 봤는데 여전히 문제는 이해가 안 되지만 코드 자체가 문제의 설명을 문자 그대로 따라갔다는 것 정도는 이해가 됐다.
https://www.acmicpc.net/problem/14503
웃긴 게 문제가 이해가 안 되지만 문제 설명 문자 그대로 코드로 옮겨놨다는 건 보인다.
끝까지 문제 상황이 머릿속에 잘 그려지지 않아 기분이 개같아졌다. 안 그래도 오늘 컨디션이 정상이 아니라 혼자 마음 속으로 쌍욕을 많이 많이 했다. 엿 같아도 일단 내가 이 문제를 이해조차 못 했다는 사실을 남기기 위해 포스팅은 한다. ㅆㅂ
나중에는 결국 부족한 나를 욕 하는 게 아닌 문제 설명을 개떡같이 써놨어;; 이러면서 출제자를 욕하는 상황까지 이르렀다. 버거킹이나 먹어야지 ㅆ
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.IOException;
import java.util.StringTokenizer;
public class boj14503 {
static int n,m,r,c,d;
static int cnt = 0;
static int[][] map;
static int[][] move = { {-1,0}, {0,1}, {1,0}, {0,-1} };
public static void main(String args[]) throws IOException {
BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bfw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer stk = new StringTokenizer(bfr.readLine());
n = Integer.parseInt(stk.nextToken()); m = Integer.parseInt(stk.nextToken());
stk = new StringTokenizer(bfr.readLine());
r = Integer.parseInt(stk.nextToken()); c = Integer.parseInt(stk.nextToken()); d = Integer.parseInt(stk.nextToken());
map = new int[n][m];
for(int i=0; i<n; i++){
stk = new StringTokenizer(bfr.readLine());
for(int j=0; j<m; j++)
map[i][j] = Integer.parseInt(stk.nextToken());
}
clean(r,c,d);
bfw.write(String.valueOf(cnt));
bfw.close();
}
static void clean(int r, int c, int d){
if(map[r][c]==0){
map[r][c] = 2;
cnt++;
}
boolean flag = false;
int original_direction = d;
for(int i=0; i<4; i++){
int next_direction = (d+3)%4;
int next_r = r + move[next_direction][0];
int next_c = c + move[next_direction][1];
if(next_r>=0 && next_r<n && next_c>=0 && next_c<m){
if (map[next_r][next_c] == 0) {
clean(next_r, next_c, next_direction);
flag = true;
break;
}
}
d = (d+3)%4;
}
if(!flag){
int next_direction = (d+2)%4;
int next_r = r + move[next_direction][0];
int next_c = c + move[next_direction][1];
if(next_r>=0 && next_r<n && next_c>=0 && next_c<m){
if(map[next_r][next_c]!=1){
clean(next_r, next_c, original_direction);
}
}
}
}
}
문제는 이해가 안 되지만 코드는 이해가 되는 요상한 상황.
나중에 다시 도전해보겠다.