일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 분할 정복
- DP
- object detection
- pytorch
- back propagation
- 백트래킹
- 가끔은_말로
- NEXT
- lazy propagation
- 회고록
- 플로이드 와샬
- BFS
- Overfitting
- 미래는_현재와_과거로
- dfs
- tensorflow
- 조합론
- 문자열
- dropout
- 알고리즘
- 2023
- 너비 우선 탐색
- 다익스트라
- 세그먼트 트리
- 이분 탐색
- 가끔은 말로
- 자바스크립트
- 크루스칼
- c++
- 우선 순위 큐
- Today
- Total
Doby's Lab
백준 1051번: 숫자 정사각형 (Python) 본문
https://www.acmicpc.net/problem/1051
1051번: 숫자 정사각형
N×M크기의 직사각형이 있다. 각 칸에는 한 자리 숫자가 적혀 있다. 이 직사각형에서 꼭짓점에 쓰여 있는 수가 모두 같은 가장 큰 정사각형을 찾는 프로그램을 작성하시오. 이때, 정사각형은 행
www.acmicpc.net
Level: Silver III
Solved By: Brute-Force
- 구할 수 있는 제일 큰 정사각형의 사이즈를 알아냅니다. -> \(size = min(n,m)\)
- 이 사이즈부터 시작하여 사이즈에 해당하며, 원소 값이 모두 동일한 정사각형이 있는지 Brute-Force 하게 탐색합니다.
- 정사각형이 있을 때까지 2번 과정을 사이즈를 한 칸씩 줄여가면서 탐색합니다.
- 만약에 있다고 판단이 되면, 거기서 반복문을 종료하며 해당 사이즈에 대한 면적 값을 구하면서 프로그램을 종료시킵니다.
이번 문제에서 알아가야 했던 점은 '파이썬에서는 공백 없이 주어진 수열의 입력을 어떻게 하나씩 처리할 것인가?'였습니다.
input: 12345, output: [1, 2, 3, 4, 5]
기존에는 map(int, input().split())
을 통해서 split
에 들어가는 argument
가 무엇인지를 통해 구분자를 지정하여 입력을 받을 수 있었는데 공백이 없는 수열은 구분자를 ''
라고 지정을 하면, ValueError: empty separator
라는 에러가 발생합니다.
이에 대한 답으로는 map(int, input())
을 사용하면 풀립니다. 이유를 알아봅시다.
map함수의 파라미터는 map(function, iterable)
로 나뉩니다. 이때 iterable이란 반복 가능한 Data Structure로 리스트, 문자열 등 쉽게 말해 인덱싱이 가능한 객체들을 뜻합니다.
이때 input().split()
의 type은 list
로 나오고, input()의 type은 string
으로 나옵니다. 여기서 가능했던 이유를 알 수 있는데 input()
을 통해 string
으로 받았기 때문에 문자열의 각 문자 원소에 접근을 하여 int function
을 적용함으로써 공백 없이 주어진 수열의 입력을 의도한 대로 처리할 수 있는 것입니다.
board = []
n, m = map(int, input().split())
for i in range(n):
board.append(list(map(int, input())))
def findlen(b, length):
for i in range(0, n-length+1):
for j in range(0, m-length+1):
if b[i][j] == b[i+length-1][j] and b[i+length-1][j] == b[i][j+length-1] and b[i][j+length-1] == b[i+length-1][j+length-1]:
return True
return False
def main():
size = min(n, m)
answer = 1
for value in range(size, 0, -1):
if findlen(board, value) == True:
answer = value * value
break
print(answer)
main()
'PS > BOJ' 카테고리의 다른 글
백준 1874번: 스택 수열 (Python) (0) | 2023.07.30 |
---|---|
백준 1021번: 회전하는 큐 (Python) (0) | 2023.07.30 |
백준 1026번: 보물 (Python) (0) | 2023.07.25 |
백준 1551번: 수열의 변화 (Python, C++) (0) | 2023.07.24 |
백준 1788번: 피보나치 수의 확장 (C++) (0) | 2023.06.23 |