백준 1652 누울 자리를 찾아라 JAVA 풀이 (구현, 문자열, 완전탐색, 시간복잡도)

2026. 4. 2. 17:29·코테(Solved.ac + Programmers)
728x90

🔗 문제 링크

https://www.acmicpc.net/problem/1652


📌 문제 개요

NxN 크기의 방이 주어지고, .은 빈칸, X는 벽을 의미한다.

가로 또는 세로로 연속된 빈칸이 2칸 이상이면 누울 수 있는 자리로 판단

- 가로 / 세로 각각 가능한 자리 개수를 구하는 문제


📌 접근 방법

이 문제는 단순 구현 문제로
연속된 '.'의 길이를 세는 방식으로 해결할 수 있다.

  • 가로 방향 탐색
    • 한 행씩 보면서 '.' 개수 카운트
    • 'X'를 만나면 구간 종료
  • 세로 방향 탐색
    • 동일한 방식으로 열 기준 탐색

📌 핵심 아이디어

  • 연속된 '.' 구간을 찾는다
  • 구간 길이가 2 이상이면 카운트
  • 'X'를 기준으로 구간을 나눈다
  • 가로와 세로는 완전히 별개로 계산

📌 전체 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        char[][] map = new char[N][N];

        for(int i = 0; i < N; i++){
            map[i] = br.readLine().toCharArray();
        }

        int rowCnt = 0;
        int colCnt = 0;

        // 가로
        for(int i = 0; i < N; i++){
            int cnt = 0;
            for(int j = 0; j < N; j++){
                if(map[i][j] == '.') cnt++;
                else {
                    if(cnt >= 2) rowCnt++;
                    cnt = 0;
                }
            }
            if(cnt >= 2) rowCnt++;
        }

        // 세로
        for(int j = 0; j < N; j++){
            int cnt = 0;
            for(int i = 0; i < N; i++){
                if(map[i][j] == '.') cnt++;
                else {
                    if(cnt >= 2) colCnt++;
                    cnt = 0;
                }
            }
            if(cnt >= 2) colCnt++;
        }

        System.out.println(rowCnt + " " + colCnt);
    }
}

🧾 정리

  • 구현 난이도는 낮지만 구간 처리가 핵심
  • 마지막 구간 체크를 빼먹기 쉬움 
  • 가로/세로를 나눠서 생각하면 매우 쉬움
728x90

'코테(Solved.ac + Programmers)' 카테고리의 다른 글

백준 2828 사과 담기 게임 JAVA 풀이 (그리디, 구현)  (0) 2026.04.04
백준 16435 스네이크버드 JAVA 풀이 (그리디, 정렬)  (0) 2026.04.03
백준 4659 비밀번호 발음하기 JAVA 풀이 (구현, 문자열, O(L))  (0) 2026.04.01
백준 9625 BABBA JAVA 풀이 (DP, 피보나치, O(N))  (0) 2026.03.31
백준 10826 피보나치 수 4 JAVA 풀이 (DP, BigInteger, 시간복잡도)  (0) 2026.03.30
'코테(Solved.ac + Programmers)' 카테고리의 다른 글
  • 백준 2828 사과 담기 게임 JAVA 풀이 (그리디, 구현)
  • 백준 16435 스네이크버드 JAVA 풀이 (그리디, 정렬)
  • 백준 4659 비밀번호 발음하기 JAVA 풀이 (구현, 문자열, O(L))
  • 백준 9625 BABBA JAVA 풀이 (DP, 피보나치, O(N))
PUSH → MERGE → DEPLOY
PUSH → MERGE → DEPLOY
데이터 흐름과 운영 자동화를 설계하는 백엔드 개발자
  • PUSH → MERGE → DEPLOY
    Coding Dongin
    PUSH → MERGE → DEPLOY
  • 전체
    오늘
    어제
    • MEUN N
      • 코테(Solved.ac + Programmers) N
      • BootCamp(JAVA)
      • JAVA
      • SpringBoot
      • JavaScript
      • JSP
      • DB(SQL)
      • React
      • HTML_CSS
      • jQuery
      • SCSS
      • GSAP
      • 설치 + 꿀팁
      • 정보처리기사 오답노트
      • 정보처리기사 기출문제
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GIT
  • 공지사항

  • 인기 글

  • 태그

    정렬
    springboot
    정처기
    자바
    정보처리기사
    구현
    배열
    프로그래머스
    java
    알고리즘
    문자열
    시뮬레이션
    백준
    solved.ac
    수학
    코딩테스트
    정처기오답노트
    완전탐색
    Level2
    level0
    백엔드개발자
    피보나치
    정처기실기
    브루트포스
    자료구조
    정보처리기사 실기 기출문제
    기출문제
    실기
    dp
    level1
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.4
PUSH → MERGE → DEPLOY
백준 1652 누울 자리를 찾아라 JAVA 풀이 (구현, 문자열, 완전탐색, 시간복잡도)
상단으로

티스토리툴바