백준_설탕 배달

임정민·2024년 1월 26일
0

알고리즘 문제풀이

목록 보기
152/173
post-thumbnail

백준 실버4 문제입니다. 실전에 대비하기 위해 60분 시간제한을 두고 풀었습니다.

문제

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

[나의 풀이]

⌛ 28분


N = int(input())
ans = 0
find = False

if N%5==0:
    ans = N//5
    find = True
else:
    bongji5 = N//5+1 # 5kg 봉지 갯수
    # bongji3 = 0 # 3kg 봉지 갯수

    while bongji5>=0:

        rest = N-bongji5*5

        if rest<0:
            bongji5 -= 1
        elif rest>0:
            if rest%3==0:
                ans = bongji5+rest//3
                find = True
                break
            else:
                bongji5 -= 1

if find:
    print(ans)
else:
    print(-1)

설탕 무게(N)가 입력될 때, 5kg 혹은 3kg 봉지를 활용하여 모든 설탕을 담고자 할 때 최소 봉지 갯수를 구하는 문제입니다.

5kg 봉지만 활용하여 담을 수 있을 때는 바로 정답이므로 조건문으로 설정해 주었습니다.

5kg 봉지의 최대 갯수로 전부 담을 수 없다면 5kg 봉지를 1개씩 줄이며 그 나머지(rest) 설탕 무게를 3kg로 전부 담을 수 있을 때를 구하여 해결하였습니다.

[다른 사람의 풀이1]


sugar = int(input())

bag = 0
while sugar >= 0 :
    if sugar % 5 == 0 :  # 5의 배수이면
        bag += (sugar // 5)  # 5로 나눈 몫을 구해야 정수가 됨
        print(bag)
        break
    sugar -= 3  
    bag += 1  # 5의 배수가 될 때까지 설탕-3, 봉지+1
else :
    print(-1)

'나의 풀이'와는 약간 다르게 접근한 풀이입니다.

전체 설탕 무게에서 3kg씩 뺄셈함과 동시에 봉지를 추가하고 남은 설탕 무게를 전부 5kg로 담을 수 있을 때의 봉지 갯수를 합하며 구현한 방식입니다.

이때, 남은 설탕 무게가 음수가 된다면 이는 5kg,3kg 봉지로는 딱 맞아떨어지게 담을 수 없는 경우이므로 -1을 출력하게 하였습니다.

[다른 사람의 풀이2]


num = int(input())
count = 0

while num >= 0:
  if num % 5 == 0:
    count += int(num // 5)
    print(count)
    break
  
  num -= 3
  count += 1
  
else:
  print(-1)

'다른 사람의 풀이2'와 같이 전체 설탕 무게에서 3kg씩 차감하는 방식의 풀이입니다.

감사합니다.

profile
https://github.com/min731

0개의 댓글