SWEA 1979 어디에 단어가 들어갈 수 있을까
문제 정보
- 문제 출처 : SW Expert Academy
- 문제 번호 : 1979
- 문제 제목 : 어디에 단어가 들어갈 수 있을까
- 문제 난이도 : D2
- 풀이 언어 : Java
문제
N X N 크기의 단어 퍼즐을 만들려고 한다. 입력으로 단어 퍼즐의 모양이 주어진다. 주어진 퍼즐 모양에서 특정 길이 K를 갖는 단어가 들어갈 수 있는 자리의 수를 출력하는 문제
접근
반복문과 조건문을 활용해 문제를 풀었다.
풀이
- 각 테스트 케이스마다 격자의 크기
N
과 단어의 길이K
를 입력 받는다. - 격자는 0(막힌 칸)과 1(빈 칸)으로 초기화 된다.
- 각 행을 왼쪽에서 오른쪽으로 스캔한다.
- 셀의 값이
1
이면 연속된 칸의 수를 증가시킨다. - 0(막힌 칸)을 만나면 consecutive의 값이 K와 같은지 확인하여 단어 공간으로 카운트하고 초기화한다.
- 각 열을 위에서 아래로 스캔한다.
- 행과 동일한 방식으로 열에서도 연속된 빈칸의 길이를 확인한다.
- 결과를 출력한다.
후기
어렵지 않게 해결한 문제
코드
Java
import java.util.Scanner;
import java.io.FileInputStream;
class Solution
{
public static void main(String args[]) throws Exception
{
Scanner sc = new Scanner(System.in);
int T;
T=sc.nextInt();
for(int test_case = 1; test_case <= T; test_case++)
{
int N = sc.nextInt();
int K = sc.nextInt();
int[][] grid = new int[N][N];
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
grid[i][j] = sc.nextInt();
}
}
int count = 0;
for (int i = 0; i < N; i++) {
int consecutive = 0;
for (int j = 0; j < N; j++) {
if (grid[i][j] == 1) {
consecutive++;
} else {
if (consecutive == K) count++;
consecutive = 0;
}
}
if (consecutive == K) count++;
}
for (int j = 0; j < N; j++) {
int consecutive = 0;
for (int i = 0; i < N; i++) {
if (grid[i][j] == 1) {
consecutive++;
} else {
if (consecutive == K) count++;
consecutive = 0;
}
}
if (consecutive == K) count++;
}
System.out.printf("#%d %d\n", test_case, count);
}
}
}
Java