출처 : 백준, https://www.acmicpc.net/problem/14500
14500번: 테트로미노
폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변
www.acmicpc.net
진짜 노가다 문제........겨우 맞았어........
더보기
풀이
if __name__ == '__main__':
n, m = map(int, input().split())
board = []
for i in range(n):
board.append(list(map(int, input().split())))
blocks = [[(0,0), (0,1),(0,2),(0,3)],[(0,0), (1,0), (2,0), (3,0)], [(0,0), (0,1), (1,0), (1,1)], [(0, 0), (1, 0), (2, 0), (2, 1)], [(0,0), (0,1), (0, 2), (-1, 2)], [(0, 0), (0, 1), (1, 1), (2, 1)], [(0, 0), (1, 0), (0, 1), (0, 2)], [(0, 0), (1, 0), (2, 0), (2, -1)], [(0, 0), (0, 1), (0, 2), (1, 2)], [(0, 0), (0, 1), (1, 0), (2, 0)], [(0, 0), (1, 0), (1, 1), (1, 2)], [(0,0), (1, 0), (1, 1), (2, 1)], [(0, 0), (0, 1), (-1, 1), (-1, 2)], [(0, 0), (1, 0), (1, -1), (2, -1)], [(0, 0), (0, 1), (1, 1), (1, 2)], [(0, 0), (1, -1), (1, 0), (1, 1)], [(-1, 0), (0, 0), (1, 0), (0, 1)], [(0, -1), (0, 0), (0, 1), (1, 0)], [(0, 0), (-1, 0), (1, 0), (0, -1)]]
max_val = 0
for i in range(n):
for j in range(m):
for b in blocks:
val = 0
try:
for dx, dy in b:
if i+dx < 0 or j+dy < 0:
continue
val += board[i+dx][j+dy]
except:
pass
if val > max_val:
max_val = val
print(max_val)
실수하지 않고 모든 case를 다 확인하도록 구현하느냐가 핵심인 문제인데,
그게 어려워서 골드 5인건지 다른 풀이가 있는건지........
구현, 브루트포스인 걸 보면 빡구현 문제는 맞는 것 같은데 흠.........
시간 복잡도
-
다른 사람의 풀이를 보면서 알게 된 점
-
고찰
python에서 편하면서도 불편한 점 중 하나가 index에 음수가 들어가도 접근이 가능하다는 점이다.
list에서 음수로 접근할 때 원치 않는 방향으로 전개될 수 있기 때문에 조심해야한다.
'알고리즘 > Python' 카테고리의 다른 글
[python] 백준 1012 - 유기농 배추 (0) | 2022.03.28 |
---|---|
[python] 백준 6064 - 카잉 달력 (0) | 2022.03.28 |
[python] 백준 1476 - 날짜 계산 (0) | 2022.03.28 |
[python] 백준 14501 - 퇴사 (0) | 2022.03.28 |
[python] 백준 14889 - 스타트와 링크 (0) | 2022.03.26 |