티스토리 뷰

728x90

https://www.acmicpc.net/problem/14500

 

14500번: 테트로미노

폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변

www.acmicpc.net


  • 문제 : 

폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다.

  • 정사각형은 서로 겹치면 안 된다.
  • 도형은 모두 연결되어 있어야 한다.
  • 정사각형의 변끼리 연결되어 있어야 한다. 즉, 꼭짓점과 꼭짓점만 맞닿아 있으면 안 된다.

정사각형 4개를 이어 붙인 폴리오미노는 테트로미노라고 하며, 다음과 같은 5가지가 있다.

아름이는 크기가 N×M인 종이 위에 테트로미노 하나를 놓으려고 한다. 종이는 1×1 크기의 칸으로 나누어져 있으며, 각각의 칸에는 정수가 하나 쓰여 있다.

테트로미노 하나를 적절히 놓아서 테트로미노가 놓인 칸에 쓰여 있는 수들의 합을 최대로 하는 프로그램을 작성하시오.

테트로미노는 반드시 한 정사각형이 정확히 하나의 칸을 포함하도록 놓아야 하며, 회전이나 대칭을 시켜도 된다.

 

 

 


  • 풀이 :

모든 테트로미노의 형태를 배열에 저장해두고 주어진 배열의 모든 좌표값에서 테트로미노 하나를 배치시킨다.

이 때 max값을 갱신하며 답을 찾아주면 된다.

 

 

 


  • 소스코드 : 

 

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import sysn,m=map(int, input().split())
maps=[]
for i in range(n):
  maps.append(list(map(int, input().split())))
 
tet=[[[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],[0,1],[0,2],[1,0]], #ㄱ
    [[0,0],[0,1],[0,2],[1,2]],
    [[0,0],[1,0],[1,1],[1,2]],
    [[0,2],[1,2],[1,1],[1,0]],
    [[0,1],[0,0],[1,0],[2,0]],
    [[0,0],[0,1],[1,1],[2,1]],
    [[0,0],[1,0],[2,0],[2,1]],
    [[0,1],[1,1],[2,1],[2,0]],
    [[0,0],[0,1],[0,2],[1,1]], #ㅜ
    [[0,1],[1,0],[1,1],[1,2]],
    [[0,0],[1,0],[1,1],[2,0]],
    [[1,0],[0,1],[1,1],[2,1]],
    [[0,1],[1,1],[1,0],[2,0]],
    [[0,0],[1,0],[1,1],[2,1]],
    [[0,1],[0,2],[1,1],[1,0]],
    [[0,0],[0,1],[1,1],[1,2]]]
 
result=0
for i in range(n):
  for j in range(m):
    for k in tet:
      try:
        a=maps[i+k[0][0]][j+k[0][1]]
        b=maps[i+k[1][0]][j+k[1][1]]
        c=maps[i+k[2][0]][j+k[2][1]]
        d=maps[i+k[3][0]][j+k[3][1]]
        temp=a+b+c+d
      except:
        temp=0
      result=max(result,temp)
print(result)
input = sys.stdin.readline
 
if __name__ == "__main__":
    n = int(input())
    hi = list(map(int,input().split()))
    ai = list(map(int,input().split()))
    tree = []
    ans = 0
    for i in range(n):
        tree.append([hi[i],ai[i]])
    tree.sort(key = lambda x : x[1])
    for i in range(n):
        ans += tree[i][0]+(tree[i][1]*i)
    print(ans)
cs
320x100
댓글
© 2022 WonSeok, All rights reserved