29700 우당탕당 영화예매 ⬛

kkmdevel·2024년 10월 9일

코딩테스트

목록 보기
19/21

📋문제 정리

  • 주어진 행렬에서 연속된 K개의 0이 있는 구간의 개수를 찾아라

🎯풀이

  • 주어진 행렬에 줄마다 k만큼의 구간을 끝까지 확인하는 방법. 슬라이딩 윈도우
  • 행렬을 저장한 후 행렬의 값이 1일때 +1 되는 window변수를 생성한다.
  • 각 행이 시작될때 k만큼 보며 1일때 window++를 실행하고 0이면 result++
  • 그 행의 나머지 열들 k ~ m까지 첫 열의 값(나가는 값)이 1이면 window--하고 k의 다음값(들어오는 값)이 1이면 window++를 해준다.
  • 이후 window가 0이면 result++를 해준다.
  • 2~4번째 줄을 행의 갯수만큼 반복한다.

    K가 M보다 클 수 있으니 M이 K의 이상일때만 실행한다

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

public class Main {

    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static StringTokenizer st;
    static StringBuilder sb = new StringBuilder();

    public static void main(String[] args) throws IOException {
        st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());
        int k = Integer.parseInt(st.nextToken());
        char seat[][] = new char[n][m];
        int result =0;

		//행렬 생성
        for(int i=0;i<n;i++){
          String str = br.readLine();
          for(int j=0;j<m;j++){
            seat[i][j] = str.charAt(j);
          }
        }

		//행의 개수만큼 반복
        for(int i=0;i<n;i++){
        //1일때 +1이 되는 window 변수
          int window = 0;
		//m이 k 이상일 때
          if(m>=k){
          //행의 첫 k구간 탐색
            for(int j=0;j<k;j++){
              if(seat[i][j]=='1')
                window++;
            }
			//첫 구간 답 확인
            if(window==0)
              result++;
            
            //행의 나머지 열 값들 확인
            for(int l=k;l<m;l++){
            	//나가는 열
              if(seat[i][l-k]=='1')
                window--;
                // 들어오는 열
              if(seat[i][l]=='1')
                window++;
                // 결과 확인
              if(window==0)
                result++;  
            }
          }
        }

        sb.append(result);
        System.out.println(sb);
        br.close();
    }
}
profile
25/08/12

0개의 댓글