Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- cp949
- Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encoding
- 코딩부트캠프후기
- 항해99
- 파이썬 sep
- 개발자사이드프로젝트
- 99클럽 #99일지 #코딩테스트 #개발자스터디 #항해 #til
- 파이썬
- 항해플러스
- 주니어개발자멘토링
- print sep
- Til
- not a git repository
- 99클럽
- EnvCommandError
- 코딩테스트
- MomentumParameters
- vscode cp949
- 백준
- 10430번
- 항해
- 파이썬 |
- fatal:not a git repository
- 개발자스터디
- 99일지
- print("""
- 파이썬 int()
- 주니어개발자역량강화
- 파이썬 map 함수
- 파이썬 클래스
Archives
- Today
- Total
선발대
[스파르타] 99클럽 2기 코테스터디 21일차 TIL / leet 1277 본문
Leetcode: 1277. Count Square Submatrices with All Ones (링크)
입력값으로 0, 1로 구성된 행렬이 주어지고 여기에서 모든 하위 사각형의 개수를 구하는 문제이다. 모든 행렬 요소를 for문으로 돌면서 처음에는 길이가 1인 사각형만 찾고 루프가 종료되면 다음에는 길이가 2인 사각형, 다음은 길이가 3인 사각형, ... 이런 식으로 루프를 더 이상 해당 길이의 사각형을 구하지 못할 때까지 계속 돌면 구할 수 있다. 그러나 시간이 오래 걸리고 비효율적인 방법이다. 따라서 기존 행렬을 for문으로 한 번만 돌면서 해당 위치에서 가능한 사각형 길이 개수를 갱신하는 방법으로 진행한다.
0번째 행과 열은 해당 위치에서 길이가 1인 사각형만 구할 수 있다. 그러므로 시작하는 위치는 1행, 1열의 요소에서부터다. 위의 이미지에서 빨간색 사각형으로 표시한 부분이 for문의 현재 위치다. 노란색 사각형으로 표시한 부분이 빨간색 사각형의 숫자를 갱신할지 말지 정하는 요소들이다. 만약 노란색 사각형 안에 0이 포함되어 있다면 길이가 2인 사각형은 만들 수 없다. 그러므로 그 다음 요소로 빨간색 사각형이 이동한다. 노란색 사각형 안에 0보다 큰 수만 있다면 그 중 최솟값을 빨간색 사각형 숫자에 더해서 갱신해준다.
이런 식으로 모든 for문을 돌면서 행렬 안의 숫자들을 더해주면 만들 수 있는 모든 사각형의 종류를 구할 수 있게 된다.
class Solution:
def countSquares(self, matrix: List[List[int]]) -> int:
height = len(matrix) # 행
width = len(matrix[0]) # 열
cnt = 0 # 모든 사각형 개수
# 0번째 인덱스 행 모두 더하기
for col in range(width):
cnt += matrix[0][col]
# 0번째 인덱스 열 모두 더하기
for row in range(1, height):
cnt += matrix[row][0]
# [1, 1]부터 [height-1, width-1]까지 계산하기
for row in range(1, height):
for col in range(1, width):
if matrix[row][col] == 1 and matrix[row-1][col] > 0 and matrix[row][col-1] > 0 and matrix[row-1][col-1] > 0:
matrix[row][col] += min(matrix[row-1][col], matrix[row][col-1], matrix[row-1][col-1])
cnt += matrix[row][col]
return cnt
'스파르타코딩클럽 > 활동 내용' 카테고리의 다른 글
[스파르타] 99클럽 2기 코테스터디 23일차 TIL / Leet 1011 (1) | 2024.06.11 |
---|---|
[스파르타] 99클럽 2기 코테스터디 22일차 TIL / 입국심사 (0) | 2024.06.10 |
[스파르타] 99클럽 2기 코테스터디 20일차 TIL / leet 1043 (0) | 2024.06.08 |
[스파르타] 99클럽 2기 코테스터디 19일차 TIL / leet 1641 (0) | 2024.06.07 |
[스파르타] 99클럽 2기 코테스터디 18일차 TIL / leet 894 (0) | 2024.06.06 |
Comments