https://www.acmicpc.net/problem/2590
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 |
댓글