김찬진의 개발 블로그

[23/04/17] B1051 본문

1일1알고/Java Algorithm

[23/04/17] B1051

kim chan jin 2023. 4. 17. 00:36
package baekjoon;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

// 숫자 정사각형
public class B1051 {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        int N = Integer.parseInt(st.nextToken()); // 구분자 제외하고 토큰만 인식
        int M = Integer.parseInt(st.nextToken()); // 구분자 제외하고 토큰만 인식

        // 2차원 배열 만들기
        int[][] intArr = new int[N][M];

        for(int i=0; i<N; i++) { // 행
            String str = br.readLine();

            for (int j = 0; j < M; j++) { // 열
                intArr[i][j] = str.charAt(j) - 48; // 문자 타입 숫자를 정수 타입 숫자로 변환하고 intArr에 대입
            }
        }

        // 정사각형 최대 변 길이 구하기
        int len = Math.min(N, M);

        // 가장 큰 정사각형 구하기
        while(len > 1) {
            for(int i=0; i<=N-len; i++) {
                for(int j=0; j<=M-len; j++) {
                    int num = intArr[i][j];
                    // 정사각형을 찾는다면
                    if(num==intArr[i][j+len-1]
                            && num==intArr[i+len-1][j]
                            && num==intArr[i+len-1][j+len-1]) {
                        System.out.println(len*len);
                        return;
                    }
                    // 정사각형을 찾지 못한다면 다음 열로 이동
                }
            }
            len--;
        }
        // 모든 행과 열을 뒤져봐도 정사각형을 찾기 못한다면 1 출력
        System.out.println(len*len);
    }
}

 

문제를 쪼개자. 한번에 다 하려고 하지말자. 반복문에서 하나 해결하고 반복문 나와서 다시 접근하자

if조건문에서 조건을 여러개 쓸 수 있다.

만약 조건에 하나도 일치하지 않는다면 어떻게 할지까지 생각하자. 문제 마무리를 잘 하자

'1일1알고 > Java Algorithm' 카테고리의 다른 글

[23/04/17] B18111  (2) 2023.04.17
[23/04/17] B1254  (1) 2023.04.17
[23/04/17] B2231  (0) 2023.04.17
[23/04/17] B1018  (0) 2023.04.17
[23/04/17] B11478  (0) 2023.04.17
Comments