[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)