[Swift] 백준, 설탕 배달

문제 링크

백준, 설탕 배달

잡담

동빈나님의 말씀처럼, 백준에서 그리디 알고리즘 50개정도는 풀어봐야한다고 하셔서 풀어봤습니다 ㅎㅎ 일단은 음.. 가장 재출을 많이 한 순서로 정렬해서 풀어보게 된 첫 번째 문제입니다.

근데.. 음..? 왜 정답률이 30%지.. 그래서 문제를 읽어보니 그냥 그리디 문제더라구요.. 그래서 저도 틀렸습니다 와!!! ㅋㅋㅋㅋㅋㅋㅋ 결국 맞추긴 했지만 ㅎㅎ

풀이 보시죠!

풀이

단순하게 아! 큰 숫자부터 나눠주고 나머지는 작은 숫자로 나눠주면 되겠다 싶었어요! 그래서 그렇게 해줬더니 “틀렸습니다.”

🤪 ㅎㅎ 테스트 케이스를 보니 단순하게 큰 숫자부터 생각하는게 아니라 진짜로 최소한 적게 설탕 주머니를 가져가는 문제더라구요 ㅋㅋㅋ 우리 모두 문제와 테스트 케이스를 꼼꼼히 읽어봅시다 ㅋㅋㅋ

그래서 저는 전체의 설탕 개수에서 5로 나눈 값을 기준으로 0부터 그 값까지 5를 곱해서 빼줬어요

단순한 원리인게 5킬로그램 짜리 주머니를 안가져갈 수도 있는 부분이라서 그렇게 해줬습니다.

그런 다음 뺀 값에서 %3를 해줬을 때, 0이면 이전의 결과값이랑 비교해서 현재 5킬로그램 주머니 개수 + 남은설탕개수/3을 넣어줬습니다.

뭔가 이게 말로하니까 이해가 어려우실 수 있다고 생각합니다. 코드가 몇 줄 없어서 코드를 보시는게 더 이해가 빠를 것 같습니다.

코드

//
//  main.swift
//  설탕배달
//
//  Created by 남기범 on 2020/12/30.
//  Copyright © 2020 남기범. All rights reserved.
//

import Foundation

let line = readLine()!
var count = Int(line)!
var fiveCount = count/5
var result = 5001

for i in 0...fiveCount {
    count -= 5 * i
    
    if count % 3 == 0 {
        result = min(result, i + count / 3)
    }
    
    count = Int(line)!
}

if result == 5001 {
    result = -1
}

print(result)