알고리즘

[백준, 자바, 1051번] 숫자 정사각형

hminor 2023. 12. 20. 12:09

풀이

  • 3중 for문을 사용해서 문제를 해결하고자 했으며
  • n은 범위, m은 가로, x는 n 범위에 따른 세로로 생각하여 문제를 해결하고자 했으며
  • try, except를 사용한 이유는 mtx의 범위를 벗어날 경우에 break를 걸기위해 사용
  • 그리고 더 빠른 제출을 위한 조건분기로는 
  • 큰 범위부터 찾는 것, 찾았다면 해당 for문 멈추기와 같은 것들이 있지만 
  • 그렇게까지는 하지 않아도 될 것 같아 그냥 제출

 

추가 학습

  • 자바와 파이썬의 차이점으로 인한 추가 학습 내용을 정리하려고 함.
  • 우선 2차원 배열 생성시엔
    • int[][] mtx = new int[n][] 로 단순히 int로 2차원 배열 생성한 다음 첫 배열에 길이를 작성해주면 됨
  • 다음으로 공백이 없는 문자를 배열로 받을 경우엔 br.readline().toCharArray()로 받고
    • 출력은 Arrays.toString(li) 이렇게 하면 배열을 확인할 수 있다.
  • 위 숫자 문자열 배열을 정수로 변경하고 싶다면
    • 해당 문자 - '0' 을 하게 되면 해당하는 문자의 정수에 해당하는 ASCII 가 되기에 
    • 자바에선 위와 같이 변환한다고 한다.
    • ex) '5'의 ASCII 코드 값은 53이고, '0'의 ASCII 코드 값은 48
  • 자바에선 여러 값이 같은지 한번에 비교할 수 없기에 특정 값과 같은지 각각 해줘야 한다.
    • ex) mtx[i][j] == mtx[i][j+k] && mtx[i][j] == mtx[i+k][j] && mtx[i][j] == mtx[i+k][j+k])
  • 그리고 파이썬의 max() 함수는 자바에서 Math.max() 로 사용가능하며
  • 제곱은 Math.pow(값, 제곱) 이렇게 가능하다.

 

import java.io.*;
import java.util.*;
public class 숫자정사각형 {
    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());
        int[][] mtx = new int[n][];
        int result = 0;
        
        for (int i = 0; i < n; i++) {
            char[] li = br.readLine().toCharArray();
            int[] num_li = new int[m];

            for (int j = 0; j < m; j++) {
                num_li[j] = li[j] - '0';
            }
            mtx[i] = num_li;
        }

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                for (int k = 0; k < n-i; k++) {
                    try {
                        if (mtx[i][j] == mtx[i][j+k] && mtx[i][j] == mtx[i+k][j] && mtx[i][j] == mtx[i+k][j+k]) {
                            result = Math.max(result,(int) Math.pow(k+1,2));
                        }
                    } catch (Exception e) {
                        break;
                    }
                }
            }
        }
        System.out.println(result);
    }

}