https://www.acmicpc.net/problem/14500
해당 문제의 분류는 구현입니다.
이 문제를 두 가지 종류의 해결하는 방법이 있는 거 같습니다.
1) 모든 테트로미노 경우의 수를 구하고 칸마다 대입해보기
2) 이동 거리를 4 칸으로 제한하고 탐색을 진행하기
저는 위 방법 중 2번 방법으로 시도했습니다.
제 코드는 아래와 같습니다.
해당 코드는 Python3로 제출 시 시간 초과가 발생하여 PyPy3로 제출했습니다.
전체 코드
import sys
def calculate(posList):
global mat
totVal = 0
for pos in posList:
cr = pos // M
cc = pos % M
totVal += mat[cr][cc]
return totVal
def search(posList, depth):
global answer
if depth == 4:
totVal = calculate(posList)
if answer < totVal:
answer = totVal
return
for pos in posList:
cr = pos // M
cc = pos % M
for idx in range(3):
newR = cr+dy[idx]
newC = cc+dx[idx]
if 0 <= newR < N and 0 <= newC < M and not newR * M + newC in posList:
search(posList+[newR * M + newC], depth+1)
if __name__ == "__main__":
N, M = map(int, sys.stdin.readline().strip().split())
mat = [ list(map(int, sys.stdin.readline().strip().split())) for _ in range(N) ]
dx = [1, 0, -1]
dy = [0, 1, 0]
answer = 0
for i in range(N):
for j in range(M):
search([i*M+j], 1)
print(answer)
'PS > Python' 카테고리의 다른 글
[백준] 2374 - 같은 수로 만들기 (파이썬, Python) (0) | 2021.07.06 |
---|---|
[백준] 19238 - 스타트 택시 (파이썬, Python) (0) | 2021.06.13 |
[백준] 14499 - 주사위 굴리기(파이썬, Python) (0) | 2021.05.30 |
[백준] 17144 - 미세먼지 안녕!(파이썬, Python) (0) | 2021.05.30 |
[백준] 17140 - 이차원 배열과 연산(파이썬, Python) (0) | 2021.05.19 |