우당탕탕 개발일지
[SWEA] 13732. 정사각형 판정(Java, D3) 본문
반응형
문제
N×N 크기의 격자판이 있다. 각각의 격자는 비어 있거나(‘.’), 막혀 있다(‘#’).
이때, 막혀 있는 칸들이 하나의 정사각형을 이루는지를 판단하는 프로그램을 작성하라.
[입력]
첫 번째 줄에 테스트 케이스의 수 T가 주어진다.
각 테스트 케이스의 첫 번째 줄에는 격자판의 크기 N (1≤N≤20 이 주어진다. 다음 N개의 줄은 격자판의 배치를 나타내며, 각 줄에는 ‘.’ 또는 ‘#’로만 이루어진 길이가 N인 문자열이 주어진다. 모든 격자판에는 최소 1개 이상의 ‘#’ 칸이 있음이 보장된다.
입출력 예
풀이
1. # 정보 모으기
- # 개수: 정사각형 한변의 길이를 구하기 위해
- # 처음 시작 좌표: 해당 좌표를 기준으로 정사각형 확인할 거임
2. 정사각형 확인하기
- # 시작 좌표에서 정사각형의 마지막 좌표가 주어진 격자판 안에 존재할 경우에만 작업 진행
- # 시작 좌표에서 정사각형의 크기만큼 #가 모두 채워져 있는지 확인
- #일 경우, 1번에서 구한 #의 개수에서 -1 진행
- #이 아닐 경우 for문 빠져나옴
3. 결과값 설정하기
- 2번에서 설정한 #의 개수가 0 이면 yes 출력
- 그 이유는 #의 개수가 0이면 주어진 모든 #이 정사각형을 구성하고 있다고 판단
코드
Scanner sc = new Scanner(System.in);
int t = sc.nextInt();
for (int tc = 1; tc < 1 + t; tc++) {
String result = "no";
int n = sc.nextInt();
char[][] chSQ = new char[n][n];
int a = 0, b = 0;
int shepCount = 0; // # 개수
boolean start = false, end = false;
// 입력값 저장
for (int i = 0; i < n; i++) {
String str = sc.next();
for (int j = 0; j < n; j++) {
char ch = str.charAt(j);
chSQ[i][j] = ch;
if (ch == '#') {
if (!start) {
a = i;
b = j;
start = true;
}
shepCount++;
}
}
}
int len = (int) Math.sqrt(shepCount) - 1;
if (a + len < n && b + len < n) {
for (int i = a; i <= a + len; i++) {
for (int j = b; j <= b + len; j++) {
if (chSQ[i][j] != '#') {
end = false;
break;
} else {
shepCount--;
}
}
}
}
if (shepCount == 0) {
result = "yes";
}
System.out.println("#" + tc + " " + result);
SWEA 문제
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AX8BAN1qTwoDFARO
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
반응형
'코테 > SW Expert Academy' 카테고리의 다른 글
[SWEA] 6190. 정곤이의 단조 증가하는 수(Java, D3) (0) | 2024.05.18 |
---|---|
[SWEA] 1209. [S/W 문제해결 기본] 2일차 - Sum(Java, D3) (0) | 2024.05.17 |
[SWEA] 2805. 농작물 수확하기(Java, D3) (0) | 2024.05.17 |
[SWEA] 1208. [S/W 문제해결 기본] 1일차 - Flatten(Java, D3) (0) | 2024.05.17 |
[SWEA] 1206. [S/W 문제해결 기본] 1일차 - View(Java, D3) (0) | 2024.05.17 |