유형: 주어진 크기 안에서 탐색의 범위가 변화하고, 그 범위에서 원하느 조건 처리
브루트포스
https://www.acmicpc.net/problem/1051
문제
N×M크기의 직사각형이 있다. 각 칸에는 한 자리 숫자가 적혀 있다. 이 직사각형에서 꼭짓점에 쓰여 있는 수가 모두 같은 가장 큰 정사각형을 찾는 프로그램을 작성하시오. 이때, 정사각형은 행 또는 열에 평행해야 한다.
입력
첫째 줄에 N과 M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 수가 주어진다.
출력
첫째 줄에 정답 정사각형의 크기를 출력한다.
예제 입력 1 복사
3 5
42101
22100
22101
예제 출력 1 복사
9
예제 입력 2 복사
2 2
12
34
예제 출력 2 복사
1
예제 입력 3 복사
2 4
1255
3455
예제 출력 3 복사
4
예제 입력 4 복사
1 10
1234567890
예제 출력 4 복사
1
예제 입력 5 복사
11 10
9785409507
2055103694
0861396761
3073207669
1233049493
2300248968
9769239548
7984130001
1670020095
8894239889
4053971072
예제 출력 5 복사
49
--코드
--풀이
처음에 접근할 때는, 탐색 범위를 따로 for문으로 지정해줬다. r값을 범위로 range(i,i+r) 이런식으로
-> out of range 나옴
그래서 그냥 가로 세로를 쭉 탐색하고, 변하는 크기를 당담해줄 k라는 변수를 만들고, 이 k는 가로 세로 중 작은 값이 max값으로 오게 설정하고 for문을 돌렸다.
그리고 모든 조건을 한번에 설정해주었다.
1. 정사각형을 찾기
if (i+k) <n and (j+k) < m
가로 세로에 별다른 길이를 통제하는 조건을 걸어두지 않았기 떄문에, out of range, 즉 k를 더하는 과정에서 리스트의 범위를 초과할 수 있다.
data[i][j] == ~~ 구문
각 꼭짓점의 양 끝을 조사하는 조건
2. 최대 크기의 정사각형의 크기 구하기
count의 크기를 count와 정사각형의 면적 자체로 지정
-> 즉, 이전 정사각형의 크기가 있을 때, 또다른 정사각형을 발견하면 count = 이전의 정사각형 크기,
k+1 의 제곱은 현 정사각형의 크기가 되고, 이는 더 큰 면적의 정사각형의 크기를 구할 수 있다.
'알고리즘' 카테고리의 다른 글
[백준 9324- 진짜 메시지][파이썬] (0) | 2022.09.07 |
---|---|
[알고리즘 챌린지 31일 정리] (0) | 2022.06.27 |
[백준 2606- 바이러스][파이썬]-31일차 (0) | 2022.06.26 |
[백준 1753- 최단경로][파이썬]-30일차 (0) | 2022.06.25 |
[백준 7576- 토마토][파이썬]-30일차 (0) | 2022.06.25 |