[D3] 정사각형 판정 - 13732
성능 요약
메모리: 21,396 KB, 시간: 143 ms, 코드길이: 1,362 Bytes
제출 일자
2023-10-22 23:17
출처: SW Expert Academy, https://swexpertacademy.com/main/code/problem/problemList.do
문제 해결 방법
1. 처음 #이 등장하는 인덱스를 기억한다.(min[] ={x,y})
2. 마지막으로 등장하는 인덱스를 기억한다.(max[] {x,y})
3. 처음 등장하는 인덱스부터 마지막 등장하는 인덱스까지 for문을 돌리면서 '.'이 있는지 확인한다.
4. 가로 세로 길이가 같은지 확인한다.(정사각형 판정)
5. 경계값을 잘 확인
import java.util.*;
class Solution
{
public static void main(String args[]) throws Exception
{
Scanner sc = new Scanner(System.in);
char[][] map;
int[] min,max;
int T = sc.nextInt();
for(int tc = 1; tc <= T; tc++)
{
int N = sc.nextInt();
map = new char[N][N];
min = null;
max = null;
String result = "yes";
for(int i =0;i < N; i++){
String line = sc.next();
for(int j = 0; j < N; j++){
map[i][j] = line.charAt(j);
if(map[i][j] == '#'){
if(min == null){
min = new int[]{i,j};
}
max = new int[] {i,j};
}
}
}
if(min == null || !check(map,min,max) || !(max[0] - min[0] == max[1] - min[1])){
result = "no";
}
System.out.println("#" + tc + " " + result);
}
}
private static boolean check(char[][] map, int[] min, int[] max){
for(int i = min[0]; i <= max[0]; i++){
for(int j = min[1]; j <= max[1]; j++){
if(map[i][j] != '#'){
return false;
}
}
}
return true;
}
}
계속 테스트 케이스 한개가 잘못돼서 이유를 모르고 있었는데 check부분에서 경계값을 포함하지않고 < 처리해주었다.
앞으로 문제 발생시 경계값 체크를 잘해줘야겠음
'알고리즘 - SWEA > D3' 카테고리의 다른 글
[SW expert Academy] SWEA 3431번 준환이의 운동관리 자바(Java) (1) | 2023.10.22 |
---|---|
[SW expert Academy] SWEA 13218번 조별과제 자바(Java) (0) | 2023.10.22 |
[SW expert Academy] SWEA 14178번 1차원 정원 자바(Java) (1) | 2023.10.22 |
[SW expert Academy] SWEA 14361번 숫자가 같은 배수 자바(Java) (0) | 2023.10.22 |
[SW expert Academy] SWEA 14413번 격자판 칠하기 자바(Java) (1) | 2023.10.22 |