C언어 문제풀이
SWEA 1979번: 어디에 단어가 들어갈 수 있을까
지식보부상님
2023. 11. 6. 22:27
N X N 크기의 단어 퍼즐을 만들려고 한다. 입력으로 단어 퍼즐의 모양이 주어진다.
주어진 퍼즐 모양에서 특정 길이 K를 갖는 단어가 들어갈 수 있는 자리의 수를 출력하는 프로그램을 작성하라. [예제] N = 5, K = 3 이고, 퍼즐의 모양이 아래 그림과 같이 주어졌을 때 ![]() 길이가 3 인 단어가 들어갈 수 있는 자리는 2 곳(가로 1번, 가로 4번)이 된다. ![]() [제약 사항] 1. N은 5 이상 15 이하의 정수이다. (5 ≤ N ≤ 15) 2. K는 2 이상 N 이하의 정수이다. (2 ≤ K ≤ N) [입력] 입력은 첫 줄에 총 테스트 케이스의 개수 T가 온다. 다음 줄부터 각 테스트 케이스가 주어진다. 테스트 케이스의 첫 번째 줄에는 단어 퍼즐의 가로, 세로 길이 N 과, 단어의 길이 K 가 주어진다. 테스트 케이스의 두 번째 줄부터 퍼즐의 모양이 2차원 정보로 주어진다. 퍼즐의 각 셀 중, 흰색 부분은 1, 검은색 부분은 0 으로 주어진다. [출력] 테스트 케이스 t에 대한 결과는 “#t”을 찍고, 한 칸 띄고, 정답을 출력한다. (t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.) |
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 15
int main() {
int N, K, T;
int i, j, k;
int board[MAXSIZE][MAXSIZE] = { 0, };
int cnt = 0, check=0;
scanf("%d", &T);
for (i = 0; i < T; i++) {
scanf("%d %d", &N, &K);
for (j = 0; j < N; j++)
for(k=0;k<N;k++)
scanf("%d", &board[j][k]);
//가로 방향 퍼즐 가능 여부 확인
for (j = 0; j < N; j++) {
for (k = 0; k < N; k++) {
if (board[j][k])
check++;
else {
if (check == K)
cnt++;
check= 0;
}
}
if (check == K) {
cnt++;
}
check = 0;
}
//세로 방향 퍼즐 가능 여부 확인
for (j = 0; j < N; j++) {
for (k = 0; k < N; k++) {
if (board[k][j])
check++;
else {
if (check == K)
cnt++;
check = 0;
}
}
if (check == K) {
cnt++;
}
check = 0;
}
printf("#%d %d\n", i + 1, cnt);
cnt = 0;
check = 0;
}
return 0;
}