알고리즘
[SWEA/JAVA] 1979 어디에 단어가 들어갈 수 있을까
writing turtle
2024. 11. 13. 23:01
출처 : 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);
}
}
}