백준_2839_설탕 배달

임정민·2023년 6월 2일
2

알고리즘 문제풀이

목록 보기
54/173
post-thumbnail

백준 그리디 문제풀이 입니다.

문제

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

[나의 풀이]

N = int(input())

ans = [-1]
bag = [5, 3]

# 가방 최대 갯수
max = N // bag[-1]

if N % bag[-1] != 0:
    max += 1

# 가방 최소 갯수 찾기
for i in range(max + 1):
    for j in range(max + 1):
        if N - bag[0] * i - bag[1] * j == 0:
            ans.append(i + j)
            # print(i, j, "체크")
            # print(bag[0] * i, bag[1] * j)
            del ans[0]

print(min(ans))

먼저 최악의 상황에서 사용해야하는 봉지의 갯수(max)를 구한 뒤 5kg 봉지, 3kg 봉지 각각 0부터 최대 갯수만큼 확인하여 최소로 필요하는 봉지의 갯수를 구하였습니다.🐬🐬🐬

저의 풀이 이외에 아래와 같이

[다른 사람의 풀이]

n = int(input())

if n % 5 == 0:  # 5으로 나눠떨어질 때
    print(n // 5)
else:
    p = 0
    while n > 0:
        n -= 3
        p += 1
        if n % 5 == 0:  # 3kg과 5kg를 조합해서 담을 수 있을 때
            p += n // 5
            print(p)
            break
        elif n == 1 or n == 2:  # 설탕 봉지만으로 나눌 수 없을 때
            print(-1)
            break
        elif n == 0:  # 3으로 나눠떨어질 때
            print(p)
            break

5kg 봉지로 나누어떨어질 때, 5kg or 3kg 봉지로 나누어떨어질 때, 3kg봉지로만 나누어떨어질 때, 나누어떨어지지 않을 때 경우의 수를 나누어 해결한 풀이를 볼 수 있었습니다.🐵🐵🐵

감사합니다.

profile
https://github.com/min731

0개의 댓글