해당 열(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을 리턴해야합니다.
}
'SWEA' 카테고리의 다른 글
SWEA 17319. 문자열문자열 D3 C++ (0) | 2024.05.10 |
---|---|
SWEA 1986. 지그재그 숫자 D2 C++ (0) | 2024.05.10 |
SWEA 1983. 조교의 성적 매기기 D2 C++ (0) | 2024.05.10 |
SWEA 1984. 중간 평균값 구하기 D2 C++ (0) | 2024.05.08 |
SWEA 2063. 중간값 찾기 D1 C++ (0) | 2024.05.08 |