본문 바로가기
알고리즘/BOJ

[Python] 백준 2590: 색종이

by PIAI 2021. 9. 26.

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

 

2590번: 색종이

<그림 1>과 같이 정사각형 모양을 한 여섯 종류의 색종이가 있다. 1번 색종이는 한 변의 길이가 1cm이고, 차례대로 그 길이가 1cm씩 커져, 6번 색종이의 한 변의 길이는 6cm가 된다. <그림 1> 주어진 색

www.acmicpc.net

1. 길이가 6일때는 갯수만큼 채워준다.

2. 길이가 5일때 1개 나머지는 길이가 1로 채워준다.

3. 길이가 4일때 1개 나머지는 길이가 2의 갯수만큼(max:5) 나머지는 길이가 1로 채워준다.

4. 길이가 3일때

남은 갯수가 4개이상이면 4개씩 채워주고

남은 갯수가 3개이면 길이가 2의 갯수(max:1) 나머지는 길이가 1로 채워준다.

남은 갯수가 2개이면 길이가 2의 갯수(max:3) 나머지는 길이가 1로 채워준다.

남은 갯수가 1개이면 길이가 2의 갯수(max:5) 나머지는 길이가 1로 채워준다.

5. 길이가 2일때 2의 갯수만큼(max:9) 나머지는 길이가 1로 채워준다.

6. 길이가 1일때 1의 갯수만큼(max:36)으로 채워준다.

 

paper = [0]
ans = 0
for _ in range(6):
    paper.append(int(input()))

if paper[6]:
    ans += paper[6]

while paper[5]:
    area = 36 - 5*5
    paper[5] -= 1
    paper[1] = max(paper[1]-area, 0)
    ans += 1

while paper[4]:
    area = 36 - 4*4
    area -= min(paper[2], 5) * 4
    paper[4] -= 1
    paper[2] = max(paper[2]-5, 0)
    paper[1] = max(paper[1]-area, 0)
    ans += 1

while paper[3]:
    area = 36 - 9 * min(paper[3], 4)
    if paper[3] >= 4:
        paper[3] -= 4
        area = 0
    elif paper[3] == 3:
        area -= min(1, paper[2]) * 4
        paper[3] -= 3
        paper[2] = max(paper[2]-1, 0)
    elif paper[3] == 2:
        area -= min(3, paper[2]) * 4
        paper[3] -= 2
        paper[2] = max(paper[2]-3, 0)
    else:
        area -= min(5, paper[2]) * 4
        paper[3] -= 1
        paper[2] = max(paper[2]-5, 0)

    paper[1] = max(paper[1]-area, 0)
    ans += 1

while paper[2]:
    area = 36 - 4 * min(paper[2], 9)
    paper[2] = max(paper[2]-9, 0)
    paper[1] = max(paper[1]-area, 0)
    ans += 1

while paper[1]:
    paper[1] = max(paper[1]-36, 0)
    ans += 1

print(ans)

 

'알고리즘 > BOJ' 카테고리의 다른 글

[Python] 백준 17371: 이사  (0) 2021.09.27
[Python] 백준 1398: 동전문제  (0) 2021.09.27
[Python] 백준 13975: 파일 합치기 3  (0) 2021.09.26
[Python] 백준 2513: 통학버스  (0) 2021.09.25
[Python] 백준 1082: 방 번호  (0) 2021.09.25

댓글