알고리즘
백준 1051번 문제 : 숫자 정사각형(JAVA)
쿠키담임선생님
2022. 11. 3. 11:38
문제설명
4 꼭지점이 같은 정사각형을 찾는 문제이다.
풀이 방법
일단 입력 받은 열과 행 중 가장 작은것을 기준으로 반복을 시킨다. 이유는 3행 5열일때 정사각형은 3이상의 크기로 나올 수 없기 때문이다. 그러면서 최대값이 나올 때마다 정답을 갱신시켜준다.
코드
package pro;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class test1 {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int[][] arr = new int[a][b];
for (int i = 0; i < a; i++) {
String t = br.readLine();
for (int j = 0; j < b; j++) {
arr[i][j] = t.charAt(j) - '0';
}
}
int answer = 0;
//1. 3과 5 중에 더 큰 숫자를 찾고 거기서부터 -1 로 내려와야함
int small = a<=b?a:b; //a가 b 이상이면 a 가 big에 들어감. 반대의경우는 b가 big에 들어감
for(int i = 1; i < small; i++) { // 기준점에서 각꼭지점 4번만 반복돌리면 됨.
for(int j = 0; j< a-i; j++) {
for(int k =0; k< b-i; k++) {
if(arr[j][k]==arr[j+i][k]&&arr[j][k]==arr[j][k+i]&&arr[j][k]==arr[j+i][k+i]) {
answer = i+1;
}
}
}
}
if(answer==0) {
answer=1;
}
System.out.println(answer*answer);
}
}
다른 풀이방법
loop:for 을 통해 전체 포문을 묶어버리고 가장 큰 정삼각형부터 역으로 찾아가면서 가장 큰 정사각형이 나옴과 동시에 3중 포문을 종료시키면 바로 정답이 나오게된다.
그렇게 되면 효율성이 늘어난다.