지식보부상님의 공부 일지

SWEA 1979번: 어디에 단어가 들어갈 수 있을까 본문

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;
}

채점결과

 

'C언어 문제풀이' 카테고리의 다른 글

SWEA 1206번: View (D3)  (1) 2023.11.06
SWEA 17319번: 문자열문자열 (D3)  (1) 2023.11.06
SWEA 1959번: 두 개의 숫자열  (4) 2023.11.06
SWEA 2001번: 파리 퇴치  (2) 2023.11.06
SWEA 1961번: 숫자 배열 회전  (1) 2023.11.06