ULISIA's Developer Life

[Backjoon] 1652번 누울 자리를 찾아라 Java 문제 풀이 본문

Algorithm/Backjoon

[Backjoon] 1652번 누울 자리를 찾아라 Java 문제 풀이

ULISIA 2023. 7. 11. 16:36

출처:1652번: 누울 자리를 찾아라

문제 해석

가로 혹은 세로로 2칸 이상 연속으로 빈 공간이 나온다면 해당 가로줄 혹은 세로줄은 사용할 수 있는 공간이다.

한 번 누운 줄은 무조건 몸을 쭉 뻗기 때문에 해당 줄에서 짐으로 나누어진 공간이 없다면 더 이상 다른 공간을 사용할 수 없다.

즉 이 문제는 가로와 세로를 기준으로 2중 반복문을 돌면서 2칸 이상 연속으로 . 문자가 있는 줄을 탐색하는 문제이다.

해답코드

package anystep;

import java.io.*;
import java.util.StringTokenizer;

public class Java_1652 {
    //누울 자리를 찾아라
    static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    static BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
    static StringTokenizer stk;
    static StringBuilder sb = new StringBuilder();

    public static void main(String[] args) throws IOException {
        int N = Integer.parseInt(in.readLine());
        char[][] map = new char[N][N];
        for (int y = 0; y < N; y++) {
            map[y] = in.readLine().replaceAll(" ", "").toCharArray();
        }
        int xAns = 0;
        int yAns = 0;
        for (int y = 0; y < N; y++) {
            int xCnt = 0;
            int yCnt = 0;
            for (int x = 0; x < N; x++) {
                if(map[y][x]=='.') xCnt++;
                if(map[y][x]=='X'||(x==N-1)){
                    if(xCnt>=2) xAns++;
                    xCnt=0;
                }
                if(map[x][y]=='.') yCnt++;
                if(map[x][y]=='X'||(x==N-1)){
                    if(yCnt>=2) yAns++;
                    yCnt=0;
                }
            }
        }
        System.out.println(xAns + " " + yAns);
    }
}