본문 바로가기
PS/BOJ

백준 18242 자바 - 네모네모 시력검사 (BOJ 18242 JAVA)

by Nahwasa 2022. 1. 30.

문제 : boj18242

 

 

  몇x몇 짜리 사각형인지만 알면 어차피 정해진 위치에 빈 칸이 있으므로 연산을 통해 알아낼 수 있다. 이에 따라 로직을 다음과 같이 정해서 풀었다.

 

1. '#'이 처음 나온 줄을 찾는다. 찾은 줄에서 마지막 '#'과 첫번째 '#'의 차이를 통해 길이를 알아내고, 그 중간에 '.'이 있다면 UP 이다.

 

2. '1'에서 길이를 알아냈으므로 [해당 길이-2/2]만큼은 쓸모없으므로 입력을 버리고, 중앙 행을 찾는다. 여기서 좌측과 우측을 확인하여 LEFT, RIGHT를 알아낼 수 있고 마지막까지 갈 필요없이 아직까지 안나왔다면 DOWN을 출력하면 된다.

 

 

코드 : github

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    private void solution() throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int r = Integer.parseInt(st.nextToken());
        int c = Integer.parseInt(st.nextToken());

        int cs=0, cnt=0;
        for (int i = 0; i < r; i++) {
            String tmp = br.readLine();
            if (tmp.indexOf('#') == -1) continue;

            cs = tmp.indexOf('#');
            cnt = 1;
            for (int j = cs+1; j < c; j++) {
                if (tmp.charAt(j) == '.') break;
                cnt++;
            }

            if (cnt != tmp.lastIndexOf('#')-tmp.indexOf('#')+1) {
                System.out.println("UP");
                return;
            }
            break;
        }

        for (int i = 0; i < (cnt-2)/2; i++) {
            br.readLine();
        }

        String tmp = br.readLine();
        if (tmp.charAt(cs) == '#' && tmp.charAt(cs+cnt-1) == '#') {
            System.out.println("DOWN");
        } else if (tmp.charAt(cs) == '#') {
            System.out.println("RIGHT");
        } else {
            System.out.println("LEFT");
        }
    }

    public static void main(String[] args) throws Exception {
        new Main().solution();
    }
}

댓글