SWEA

SWEA 1979. 어디에 단어가 들어갈 수 있을까 D2 C++

2024. 5. 10. 13:22

 

 

 

 

해당 열(or 행)에 1이 있다면 그 줄이 끝날 때까지 1이 K개만 있는지(count해줌),

해당 열(or 행)에 1이 K개 전에 끝나는지  (==1이 K개보다 적게 있는지) (count안해줌) 를 세주어야 한다.

열(or 행) 단위로 세주어야 하는게 중요하다.

 

(1) 현재 위치가 1인데, 이미 k개 이상의 1이 있는 경우는 pass

(2) 현재 위치가 1인데, 마지막까지 1을 세서 총 k개인 경우는 count

(3) 현재 위치가 0인데, 그 전까지 1을 센게 총 k개인 경우는 count

(4) 현재 위치가 0인데, 그 전까지 1을 센게 총 k개보다 적으면 그냥 pass됨 따로 구현x

 

작성한 코드는 다음과 같다.

#include<iostream>
using namespace std;

int main(int argc, char** argv) {
    int t;
    cin >> t;
    
    for(int num=1; num<=t; num++){
        //n, k 입력받기
        int n,k;
        cin >> n >> k;
        
        //배열 입력받기
        int arr[n][n];
        for(int j=0; j<n; j++){
        	for(int m=0; m<n; m++){
            	cin >> arr[j][m];
            }
        }
        
        // count 변수로 세기
        int result = 0;
        
        //가로 세기
        for(int i=0; i<n; i++){
            int flag=0;
            for(int j=0; j<n; j++){
                if(arr[i][j]==1){
                    flag++;
                    if(flag>k)
                        flag=0;
                    if(j==n-1&&flag==k)
                        result++;
                }
                else{
                    if(flag==k)
                        result++;     
                    flag=0;
                }
            } 
        }

        //세로 세기
        for(int i=0; i<n; i++){
            int flag=0;
            for(int j=0; j<n; j++){
                if(arr[j][i]==1){
                    flag++;
                    if(flag>k)
                        flag=0;
                    if(j==n-1&&flag==k)
                        result++;
                }
                else{
                    if(flag==k)
                        result++;     
                    flag=0;
                }
            }
        }

        //출력
        cout << "#" << num << " " << result << "\n";
    }
    
	return 0;//정상종료시 반드시 0을 리턴해야합니다.
}