[백준 - 구현] 1051번 숫자 정사각형

minjyo·2020년 10월 23일
0

알고리즘 풀이

목록 보기
3/7

백준 1051번 숫자 정사각형

내 코드



1. 구현 방법

  • 찾으려는 정사각형의 한 변의 길이는 n, m의 최솟값 l 으로 시작하여 1씩 줄여나간다.
  • 찾은 정사각형의 꼭짓점의 수가 모두 같으면 l이 답이다.
  • 정사각형의 한 변의 길이가 l일 때, 검사해야 하는 정사각형의 x(가로)의 범위는 0<=x<m+1-i 이고, y(세로)의 범위는 0<=y<n+1-i 이다.
  • l==1 이면 답은 1이다.



2. 놓쳤던 점

if(rec[0][0]==rec[0][i-1] && rec[0][i-1]==rec[i-1][0] && rec[i-1][0]==rec[i-1][i-1]) {
	System.out.println(i*i);
	return;
}

(1) 처음에 아무 생각 없이 무조건 rec[0][0] x, y의 범위를 조절하였다. 다음과 같이 현재의 x, y에서 시작하여 범위를 조절해야한다.

if(rec[y][x]==rec[y][x+i-1] && rec[y][x+i-1]==rec[y+i-1][x] && rec[y+i-1][x]==rec[y+i-1][x+i-1]) {
	System.out.println(i*i);
	return;
}

if(l!=1) { 
	for(int i=l; i>1; i--) { 
		for(int y=0; y<n+1-i; y++) {
			for(int x=0; x<m+1-i; x++) { //if 4 point equal?
				if(rec[y][x]==rec[y][x+i-1] && rec[y][x+i-1]==rec[y+i-1][x] && rec[y+i-1][x]==rec[y+i-1][x+i-1]) {
					System.out.println(i*i);
					return;
				}
			}
		}
	}
	System.out.println(1); //can't find answer>=2
}else { //l==1, answer: 1^2=1
	System.out.println(1);
}

(2) 만약 l=2 일 때까지 정사각형을 찾지 못하면 답은 무조건 1이다. (가장 바깥의 for문의 조건을 i>0으로 해도 된다.)

profile
깊게 공부하는 개발자가 되기

0개의 댓글

관련 채용 정보