Potato
μ•ˆλ…•ν•˜μ„Έμš”, κ°μž‘λ‹ˆλ‹€?πŸ₯” ^___^ 😺 github λ°”λ‘œκ°€κΈ° πŸ‘‰πŸ»

Algorithm/Baekjoon

[λ°±μ€€] (Swift) 2839번 - 섀탕 배달 (μˆ˜ν•™μ μΈ 풀이 & dp풀이, 두가지 풀이 방법)

감자 πŸ₯” 2022. 7. 14. 21:49
λ°˜μ‘ν˜•

 

🟠 문제 링크

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

 

2839번: 섀탕 배달

μƒκ·Όμ΄λŠ” μš”μ¦˜ 섀탕곡μž₯μ—μ„œ 섀탕을 λ°°λ‹¬ν•˜κ³  μžˆλ‹€. μƒκ·Όμ΄λŠ” μ§€κΈˆ μ‚¬νƒ•κ°€κ²Œμ— 섀탕을 μ •ν™•ν•˜κ²Œ Nν‚¬λ‘œκ·Έλž¨μ„ 배달해야 ν•œλ‹€. 섀탕곡μž₯μ—μ„œ λ§Œλ“œλŠ” 섀탕은 봉지에 담겨져 μžˆλ‹€. λ΄‰μ§€λŠ” 3ν‚¬λ‘œκ·Έ

www.acmicpc.net

 

🟠 문제 풀이 방법 (1) - μˆ˜ν•™μ μΈ 풀이 

μˆ˜ν•™μ μœΌλ‘œ μ ‘κ·Όν•˜λ©΄ 사싀 ꡉμž₯히 κ°„λ‹¨ν•˜κ²Œ ν’€λ¦°λ‹€. 첫번째 예제인 18둜 예λ₯Όλ“€μ–΄λ³΄μž.
"5둜 막 λ‚˜λˆ„λ‹€κ°€ λ§ˆμ§€λ§‰μ— 3μ˜λ°°μˆ˜κ°€ λ˜λŠ”μ§€ 찾아보면 μ΅œμ†Œκ°’ 찾을 수 μžˆμ§€μ•Šμ•„?" 라고 생각할 수 μžˆλ‹€. λ‚˜λ˜ν•œ κ·Έλž¬μ—ˆκ³  ^__^ 근데 예제 5λ²ˆμ„ 보면, 11은 5kg / 5kg ν•˜κ³  1kgκ°€ λ‚¨κ²Œλ˜μ–΄μ„œ -1을 좜λ ₯ν•˜λŠ”κ²Œ μ•„λ‹ˆλΌ, 3kg / 3kg / 5kg 둜 봉지λ₯Ό λ“€ 수 μžˆλ‹€. κ·Έλž˜μ„œ 3이라고 좜λ ₯ν•΄μ•Όν•œλ‹€. 이런 μ˜ˆμ™Έμ‚¬ν•­μ„ 보고 μ½”λ“œλ₯Ό μ§œμ•Όν–ˆλ‹€.

κ·Έλž˜μ„œ μ„ νƒν•œ 방법은, 5의 λ°°μˆ˜μΈμ§€ λ¨Όμ € 확인해쀀 λ’€, 3을 λ°°μ£Όκ³ , λ‹€μ‹œ 5의 λ°°μˆ˜μΈμ§€ 확인해주고, κ·Έλž˜λ„ μ•„λ‹ˆλΌλ©΄ 또 3을 λΉΌμ£Όκ³ ... 이 과정을 λ°˜λ³΅ν•˜λ©΄ λ˜κ² λ‹€ 라고 μƒκ°ν–ˆλ‹€. 

 

πŸ”Έ  μˆ˜ν•™μ μΈ 풀이 μ •λ‹΅ μ½”λ“œ 

https://github.com/deslog/Algorithm/blob/main/Algorithm/Boj/2839_%EC%84%A4%ED%83%95%EB%B0%B0%EB%8B%AC/basic%20solution%20(math).swift

 

GitHub - deslog/Algorithm

Contribute to deslog/Algorithm development by creating an account on GitHub.

github.com

var sugar = Int(String(readLine()!))!
var bag = 0

while sugar >= 3 {
    if sugar % 5 == 0 {
        bag += 1
        sugar -= 5
    } else {
        sugar -= 3
        bag += 1
    }
}

if sugar == 0 {
    print(bag)
} else {
    print(-1)
}

 

🟠 문제 풀이 방법 (2) - DP 둜 ν’€κΈ° (λ™μ κ³„νšλ²•)

사싀 이 λ¬Έμ œλŠ” λ°±μ€€μ—μ„œ DP 둜 λΆ„λ₯˜λ˜μ–΄μžˆλ‹€. λ”± 보자마자, λ°”λ‘œ μˆ˜ν•™μ μΈ ν’€μ΄λ‘œ 풀이가 κ°€λŠ₯ν•΄μ„œ κ·Έλƒ₯ ν’€μ—ˆμ§€λ§Œ, λ­”κ°€ 'μ—°μ†ν•΄μ„œ κ³„μ‚°ν•œλ‹€'λΌλŠ” 말이 λͺ…μ‹œμ μœΌλ‘œ μ—†κΈ° λ•Œλ¬Έμ— DP둜 풀거라고 μƒκ°μΉ˜λ„ λͺ»ν–ˆλ‹€. (κ·Έλƒ₯ μ• μ΄ˆμ— μˆ˜ν•™μ μΈ ν’€μ΄λ‘œ λ„ˆλ¬΄ κ°„λ‹¨ν•˜κ²Œ ν’€λ €μ„œ DP둜 풀생각쑰차 μ•ˆν–ˆλ˜ 것 κ°™λ‹€.)

κ·ΈλŸ¬λ‹€κ°€ κΆκΈˆν•΄μ Έμ„œ dp λ‘œλ„ ν’€μ–΄λ΄€λ‹€.

점화식은 μ΄λ ‡κ²Œ λ„μΆœλœλ‹€.

i-5ν–ˆμ„λ•Œ 0 μ΄ν•˜λ‘œ λ‚˜μ˜€κ²Œ 되면 index out of range μ—λŸ¬κ°€ λ‚˜κΈ° λ•Œλ¬Έμ— dp[3]κ³Ό dp[5] λŠ” 1을 λ„£μ–΄μ£Όκ³  μ‹œμž‘ν•΄μ•Όν•œλ‹€.

그리고,,, μž…λ ₯λ˜λŠ” n은 3λΆ€ν„° μ‹œμž‘μ΄μ§€λ§Œ, 4μ—λŒ€ν•œ μ˜ˆμ™Έμ²˜λ¦¬κ°€ ν•„μš”ν•˜λ‹€. 4λ₯Ό μ²˜λ¦¬ν•˜μ§€μ•ŠμœΌλ©΄ dp[5]λŠ” out of range λΌμ„œ 컴파일 μ—λŸ¬κ°€ λ‚˜κΈ°λ•Œλ¬Έμ— 4μΌλ•Œ print(-1)ν•΄μ£ΌλŠ” μ²˜λ¦¬μ™€, dp[5]에 1을 넣어주지 μ•ŠλŠ” 과정이 ν•„μš”ν•˜λ‹€!! (이거 λ•Œλ¬Έμ— μ‹œκ°„μ„ 거의 20뢄은 버린듯, 주어진 예제말고 λ‹€λ₯Έ μ˜ˆμ œλ„ μž…λ ₯ν•΄λ³΄μž)

πŸ”Έ dp 풀이 μ •λ‹΅μ½”λ“œ

https://github.com/deslog/Algorithm/blob/main/Algorithm/Boj/2839_%EC%84%A4%ED%83%95%EB%B0%B0%EB%8B%AC/dp%20solution.swift

 

GitHub - deslog/Algorithm

Contribute to deslog/Algorithm development by creating an account on GitHub.

github.com

var n = Int(String(readLine()!))!
var dp = Array(repeating: 5001, count: n+1)

if n > 2 {
    dp[3] = 1
    if n > 4{
        dp[5] = 1
    }
}

if n > 5 {
    for i in 6..<n+1 {
        dp[i] = min(dp[i-3]+1, dp[i-5]+1)
    }
}

if n == 4 {
    print(-1)
} else {
    if dp[n] > 5001 {
        print(-1)
    } else {
        print(dp[n])
    }
}

 

λ°˜μ‘ν˜•