문제

* 해당 문제의 모든 저작권은 SWEA 측에 있으며 본 블로그는 SWEA  약관을 위배하지 않음을 명시합니다.*

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

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


풀이

DFS로 방향 걸어서 Depth만 구하려다가 자바 메소드 구현에 안 익숙해서 하드 코딩 했습니다...허허

나중에 시간나면 DFS로 다시 구현해봐야겠습니다

단순한 구현으로도 풀 수 있습니다.

편의성을 위해 저는 바깥쪽을 0으로 한칸씩 추가했습니다.

 


소스 코드

import java.util.Scanner;

public class Solution {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);

		int T = sc.nextInt();

		for (int test_case = 1; test_case <= T; test_case++) {
			int[][] arr = new int[17][17];
			int answer = 0;
			int arr_size = sc.nextInt();
			int word_size = sc.nextInt();

			// 초기화
			for (int i = 0; i < 17; i++) {
				for (int j = 0; j < 17; j++) {
					arr[i][j] = 0;
				}
			}

			// 입력받기
			for (int i = 1; i <= arr_size; i++) {
				for (int j = 1; j <= arr_size; j++) {
					arr[i][j] = sc.nextInt();
				}
			}

			// 확인
			for (int i = 1; i <= arr_size; i++) {
				for (int j = 1; j <= arr_size; j++) {
					if (arr[i][j] == 1) {
						// 가로
						if (j - 1 >= 0 && j + word_size <= 16) {
							if (arr[i][j - 1] == 0 && arr[i][j + word_size] == 0) {
								for (int r = j; r < j + word_size; r++) {
									if (arr[i][r] != 1)
										break;

									if (r == j + word_size - 1)
										answer++;
								}
							}
						}
						// 세로
						if (i - 1 >= 0 && i + word_size <= 16) {
							if (arr[i - 1][j] == 0 && arr[i + word_size][j] == 0) {
								for (int c = i; c < i + word_size; c++) {
									if (arr[c][j] != 1)
										break;

									if (c == i + word_size - 1)
										answer++;
								}
							}
						}
					}
				}
			}

			System.out.println("#" + test_case + " " + answer);
		}
	}
}

+ Recent posts