백준 14503번( 자바 )

Flash·2022년 1월 17일
0

BOJ-Algorithm

목록 보기
30/51
post-thumbnail

백준 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);
                }
            }
        }
    }
}

문제는 이해가 안 되지만 코드는 이해가 되는 요상한 상황.
나중에 다시 도전해보겠다.

profile
개발 빼고 다 하는 개발자

0개의 댓글