(Swift) 백준 2839 설탕 배달

SteadySlower·2022년 5월 15일
0

Coding Test

목록 보기
30/298

처음 풀이

2839번: 설탕 배달

let weight = Int(readLine()!)!

var five = weight / 5

while true {
    if (weight - five * 5) % 3 == 0 {
        print(five + (weight - five * 5) / 3)
        break
    }
    five -= 1
    if five < 0 {
        print(-1)
        break
    }
}
  1. 그리디 알고리즘 문제이다. 다만 다른 그리디 알고리즘과는 다르게 설탕 봉지가 5, 3으로 서로 배수 관계가 아닙니다.
    1. 보통 가장 흔한 그리디 문제는 100원, 500원, 1000원으로 계산하기처럼 선택지들이 배수 관계를 가지는 경우가 많습니다.
  2. 그렇더라도 선택지가 2개 밖에 없으므로 5kg짜리 봉지를 많이 배달할 수록 좋다는 것을 알 수 있습니다.
    1. 만약에 배수 관계가 아닌데 선택지가 3가지 이상이면 복잡해집니다...
  3. 5kg 봉지의 갯수를 총 무게를 5로 나눈 몫 (= 주어진 무게에서 들 수 있는 최대 5kg 봉지의 갯수)에서 시작해서 1씩 빼가면서 3으로 나누어 떨어지는지 체크합시다.
  4. 3으로 나누어 떨어질 때 두 봉지 수를 더해서 출력합니다.
  5. 만약에 5kg 봉지의 갯수가 -1이 된다면 정확하게 Nkg을 만들 수 없는 것이므로 -1을 출력합니다.

다른 풀이

위 풀이와는 반대 방향에서 접근하는 것입니다. 총 무게에서 3kg 씩 빼보면서 5kg로 나누어 떨어지는 지점을 찾습니다.

let weight = Int(readLine()!)!

var three = 0

while true {
    if (weight - 3 * three) % 5 == 0 {
        print(three + (weight - 3 * three) / 5)
        break
    }
    three += 1
    if weight - 3 * three < 0 {
        print(-1)
        break
    }
}
profile
백과사전 보다 항해일지(혹은 표류일지)를 지향합니다.

0개의 댓글