본문 바로가기
알고리즘

[SWEA/JAVA] 1979 어디에 단어가 들어갈 수 있을까

by writing turtle 2024. 11. 13.

출처 : https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PuPq6AaQDFAUq

 

 

빈칸인 부분을 찾고, 거기부터 k번째 칸까지 빈칸인지 확인. 그리고 그 다음칸이 벽이면 들어갈 수 있는곳, 빈칸이라면 들어갈 수 없는 곳으로 처리를 해줬다.

단순하게 생각한대로 짜면 나옴

 

import java.util.Scanner;

public class Solution {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int testCase = sc.nextInt();

		for (int tc = 1; tc <= testCase; tc++) {
			int n = sc.nextInt();
			int k = sc.nextInt();
			int cnt = 0;
			int [][] map = new int[n][n];
			
			for (int i = 0; i < n; i++) {
				for (int j = 0; j < n; j++) {
					map[i][j] = sc.nextInt();
				}	
			}
			for (int i = 0; i < n; i++) {
				int kcnt = 0;
				for (int j = 0; j <= n-k; j++) {
					if(j==0 || map[i][j-1] == 0) {
						boolean flg = false;
						for(int l = 0; l<k; l++) {
							if(map[i][j+l] == 0) { flg = true; break;}
							if(l == k-1) {
								
								if((l+j == n-1 && !flg) || (map[i][j+l+1]==0 && !flg)) {
									cnt++;
								}
							}
						}
					}
				}	
			}
			for (int i = 0; i < n; i++) {
				int kcnt = 0;
				for (int j = 0; j <= n-k; j++) {
					if(j==0 || map[j-1][i] == 0) {
						boolean flg = false;
						for(int l =0; l<k; l++) {
							if(map[j+l][i] == 0) { flg = true; break;}
							if(l == k-1) {
								if((l+j == n-1 && !flg) || (map[j+l+1][i]==0 && !flg)) {
									cnt++;
								}
							}
						}
						
					}
				}	
			}
			System.out.println("#" + tc + " " + cnt);
		}
	}
}