티스토리 뷰
728x90
https://www.acmicpc.net/problem/14500
- 문제 :
폴리오미노란 크기가 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
'Algorithm > Brute Force' 카테고리의 다른 글
(Python) - BOJ(18111번) : 마인크래프트 (0) | 2022.02.16 |
---|---|
(Python) - BOJ(14889번) : 스타트와 링크 (0) | 2022.02.10 |
(Python) - BOJ(9019번) : DSLR (0) | 2022.02.04 |
(C++) - BOJ(4673번) : 셀프 넘버 (0) | 2022.02.03 |
(Python) - BOJ(3042번) : 트리플렛 (0) | 2022.02.01 |
댓글
© 2022 WonSeok, All rights reserved