말하는 컴공감자의 텃밭

Sw expert 13732. 정사각형 판정 D3 본문

알고리즘/SW expert - Java

Sw expert 13732. 정사각형 판정 D3

현콩 2023. 12. 8. 12:00
728x90

Sw expert 13732. 정사각형 판정 D3
넴몸넴몸빔

 

'#' 들이 정사각형 처럼 있나 확인하는 문제다.

0,0 에서 시작해서 오른쪽, 아래로만 탐색해서 정사각형이 이뤄지는지 판단해주었다.

첫번째 '#' 가 나온다면 그 왼쪽과 위에 '#' 가 있으면 안되니까 첫번째 '#'가 등장하면 flag 로 시작점을 알려주었다.

이후로는 cnt ++ 를 통해 '#' 의 개수를 저장했고. Math.sqrt(cnt)로 변의 길이를 구해 주었다.

변의 길이만큼 조사하고, 정사각형 범주가 아니라면 chk 를 통해  answer 에 "yes" 또는 "no"를 넣어주었다.

 

위 조건으로 #가 하나인경우도 포함된다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import java.util.*;
 
class Solution {
    public static int[] dr = { 01 };
    public static int[] dc = { 10 };
 
    public static void main(String args[]) throws Exception {
        Scanner sc = new Scanner(System.in);
 
        int T = sc.nextInt();
        for (int tc = 1; tc <= T; tc++) {
            String answer = "error";
            int cnt = 0;
            int N = sc.nextInt();
            char[][] arr = new char[N][N];
            boolean flag = false;
            boolean chk = false;
            int r = 0;
            int c = 0;
            for (int i = 0; i < N; i++) {
                String s = sc.next();
                for (int j = 0; j < N; j++) {
                    char ch = s.charAt(j);
                    arr[i][j] = ch;
                    if (ch == '#') {
                        if (!flag) {
                            r = i;
                            c = j;
                            flag = true;
                        }
                        cnt++;
                    }
                }
            }
            int length = (int) Math.sqrt(cnt) - 1;
            if(r+ length < N && c+length < N) {
                square_chk : 
                    
                for (int i = r; i <= r+length; i++) {
                    for (int j = c; j <= c+length; j++) {
                        if(arr[i][j] != '#') {
                            chk = false;
                            break square_chk ;
                        }else {
                            cnt --;
                        }
                    }
                }
            }
 
            if(cnt == 0) {
                chk = true;
            }
            answer = (chk) ? "yes""no";
 
            System.out.println("#" + tc + " " + answer);
        }
    }
}
cs

 

쉽죠 후후 26%라고 쫄지 맙시다.

728x90
Comments