풀이
- 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);
}
}
'알고리즘' 카테고리의 다른 글
[백준, 파이썬, 1059번] 좋은 구간 (0) | 2023.12.21 |
---|---|
[백준, 자바, 1059번] 좋은 구간 (0) | 2023.12.21 |
[백준, 파이썬, 1051번] 숫자 정사각형 (0) | 2023.12.20 |
[백준, 파이썬, 1021번] 회전하는 큐 (0) | 2023.12.19 |
[백준, 자바, 1021번] 회전하는 큐 (0) | 2023.12.19 |