
문제
* 해당 문제의 모든 저작권은 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);
}
}
}'Programming Practice > SWEA' 카테고리의 다른 글
| [SWEA] 1961. 숫자 배열 회전 - D2 (Java) (0) | 2022.07.05 |
|---|---|
| [SWEA] 2001. 파리 퇴치 - D2 (Java) (0) | 2022.07.05 |
| [SWEA] 1959. 두 개의 숫자열 - D2 (Java) (0) | 2022.07.05 |
| [SWEA] 1215. 회문1 - (C++) (0) | 2022.06.04 |
| [SWEA] 1209. SUM - D3 (C++) (0) | 2022.05.30 |