[백준 14500번] 테트로미노 - Python으로 구현하기

 

문제 접근

  • 테트로미노가 되는 도형 5개를 제시해주었다.
  • 해당 도형을 회전, 대칭시켜서 나올 수 있는 모든 경우의 수를 탐색하자

 

생각해볼 점

  • 백트래킹으로 풀 수 있을 것 같다. 도전해보기!

 

오답 분석

  • 좌표 계산 실수
  • 단순 구현으로 문제를 접근 하는 경우 실수하면 찾기 힘드므로 집중하기!

 

# 테트로미노
n,m=map(int,input().split())
map_data = [list(map(int,input().split())) for _ in range(n)]

t1 =[[[0,0],[1,0],[2,0],[3,0]],
     [[0,0],[0,1],[0,2],[0,3]]]

t2 = [[[0,0],[0,1],[1,0],[1,1]]]

t3 =[[[0,0],[1,0],[2,0],[2,-1]],
     [[0,0],[0,-1],[1,0],[2,0]],
     [[0,0],[1,0],[2,0],[2,1]],
     [[0,0],[1,0],[2,0],[0,1]],
     [[0,0],[0,-1],[0,-2],[1,0]],
     [[0,0],[-1,0],[0,-1],[0,-2]],
     [[0,0],[-1,0],[0,1],[0,2]],
     [[0,0],[1,0],[0,1],[0,2]]]

t4 = [[[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]]]

t5 = [[[0,0],[0,1],[0,2],[1,1]],
      [[0,0],[0,1],[-1,1],[1,1]],
      [[0,0],[0,1],[0,2],[-1,1]],
      [[0,0],[1,0],[2,0],[1,1]]]

all_case=t1+t2+t3+t4+t5
max_sum=0
for i in range(n):
    for j in range(m):
        for tet in all_case:
            tmp = 0
            for tet_pos in tet:
                nx,ny=i+tet_pos[0],j+tet_pos[1]
                if 0<=nx<n and 0<=ny<m:
                    tmp+=map_data[nx][ny]
                else:
                    break
            max_sum=max(max_sum,tmp)
print(max_sum)

 

* 틀린 부분이나 더 나은 방법이 있을 수 있습니다. 지적해주시면 감사하겠습니다!!

+ Recent posts