2590 - 색종이

LeeKyoungChang·2022년 6월 2일
0

Algorithm

목록 보기
134/203
post-thumbnail
post-custom-banner

📚 2590 - 색종이

색종이

 

이해

6cm 크기의 정사각형 갯수를 구하는 문제이다.

arr[1], arr[2], arr[3], arr[4], arr[5], arr[6]

 

✔ 경우의 수
(1) 한 변의 길이가 6인 정사각형 필요한 갯수

  • 6cm 갯수 만큼

(2) 한 변의 길이가 5인 정사각형 필요한 갯수

  • 5cm 갯수 만큼, 1cm 갯수를 빼준다.

(3) 한 변의 길이가 4인 정사각형 필요한 갯수

  • 4cm 갯수 만큼, 2cm 갯수를 빼준다.
  • 만약, 2cm 갯수가 없다면, 남은 곳은 1로 채워준다. (36 - 16) 개 만큼 남은 공간을 채울 수 있다.

(4) 한 변의 길이가 3인 정사각형 필요한 갯수

  • 36 - 9 * (3cm의 갯수)
    • 3cm의 갯수가 4개 이상이라면, 4의 배수씩 빼준다.
    • 3cm의 갯수가 3개라면, 2cm갯수가 1이상이라면 2cm에서 갯수를 1뺀다.
    • 3cm의 갯수가 2개라면, 2cm갯수가 3이상이라면 2cm에서 갯수를 3뺀다. (아니라면 2의 갯수만큼 빼준다.)
    • 3cm의 갯수가 1개라면, 2cm갯수가 5이상이라면 2cm에서 갯수를 5뺀다. (아니라면 2의 갯수만큼 빼준다.)

(5) 한 변의 길이가 2인 정사각형 필요한 갯수

  • 36 - (2*2) * (2cm의 갯수)
  • 2의 갯수를 9씩 빼준다.
  • 9를 빼고 남은 공간은 1로 채운다. (1cm가 있다면)

(6) 한 변의 길이가 1인 정사각형 필요한 갯수

  • 1cm갯수 - 36이 0보다 크다면 갯수를 1씩 추가한다.

 

소스

import sys  
  
read = sys.stdin.readline  
  
arr = [0] * 7  
  
for i in range(1, 7):  
    arr[i] = int(read())  
  
answer = 0  
  
# (1) 길이가 6인 정사각형 필요 갯수  
answer += arr[6]  
  
# (2) 길이가 5인 정사각형 필요 갯수  
while arr[5]:  
    res = 36 - (5 * 5)  
    arr[5] -= 1  
    arr[1] = max(arr[1]-res, 0)  
    answer += 1  
  
# (3) 길이가 4인 정사각형 필요 갯수  
while arr[4]:  
    res = 36 - (4 * 4)  
    res -= min(arr[2], 5) * 4  
    arr[2] = max(arr[2]-5, 0)  
    arr[1] = max(arr[1] - res, 0)  
    arr[4] -= 1  
    answer += 1  
  
# (4) 길이가 3인 정사각형 필요 갯수  
while arr[3]:  
    res = 36 - 9 * min(arr[3], 4)  
  
    if arr[3] >= 4:  
        res = 0  
        arr[3] -= 4  
    elif arr[3] == 3:  
        res -= min(arr[2], 1) * 4  
        arr[3] -= 3  
        arr[2] = max(arr[2]-1,0)  
    elif arr[3] == 2:  
        res -= min(arr[2], 3) * 4  
        arr[3] -= 2  
        arr[2] = max(arr[2] - 3, 0)  
    else:  
        res -= min(arr[2], 5) * 4  
        arr[3] -= 1  
        arr[2] = max(arr[2] - 5, 0)  
  
    arr[1] = max(arr[1] - res, 0)  
    answer += 1  
  
# (5) 길이가 2인 정사각형 필요 갯수  
while arr[2]:  
    res = 36 - 4 * min(arr[2], 9)  
    arr[2] = max(arr[2] - 9, 0)  
    arr[1] = max(arr[1] - res, 0)  
    answer += 1  
  
# (6) 길이가 1인 정사각형 필요 갯수  
while arr[1]:  
    arr[1] = max(0, arr[1] - 36)  
    answer += 1  
  
print(answer)

123

 

profile
"야, (오류 만났어?) 너두 (해결) 할 수 있어"
post-custom-banner

0개의 댓글