๋ฐฑ์ค€

๋ฐฑ์ค€ 2839 ์„คํƒ• ๋ฐฐ๋‹ฌ - ํŒŒ์ด์ฌ

stoneeee 2022. 12. 29. 16:56

 

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

 

2839๋ฒˆ: ์„คํƒ• ๋ฐฐ๋‹ฌ

์ƒ๊ทผ์ด๋Š” ์š”์ฆ˜ ์„คํƒ•๊ณต์žฅ์—์„œ ์„คํƒ•์„ ๋ฐฐ๋‹ฌํ•˜๊ณ  ์žˆ๋‹ค. ์ƒ๊ทผ์ด๋Š” ์ง€๊ธˆ ์‚ฌํƒ•๊ฐ€๊ฒŒ์— ์„คํƒ•์„ ์ •ํ™•ํ•˜๊ฒŒ Nํ‚ฌ๋กœ๊ทธ๋žจ์„ ๋ฐฐ๋‹ฌํ•ด์•ผ ํ•œ๋‹ค. ์„คํƒ•๊ณต์žฅ์—์„œ ๋งŒ๋“œ๋Š” ์„คํƒ•์€ ๋ด‰์ง€์— ๋‹ด๊ฒจ์ ธ ์žˆ๋‹ค. ๋ด‰์ง€๋Š” 3ํ‚ฌ๋กœ๊ทธ

www.acmicpc.net

 

 

dp์™€ ์ˆ˜ํ•™ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ํ’€์—ˆ๋‹ค.

 

 

 

 

- dp ํ’€์ด

dp ๋ฐฐ์—ด์„ ์„ ์–ธํ•ด ์—ฌ๊ธฐ์— ๋‹ต์„ ์ €์žฅํ•ด๊ฐ€๋ฉฐ ํ’€ ์ˆ˜ ์žˆ๋‹ค.

dp[n]์€ n kg์˜ ์„คํƒ•์„ ์˜ฎ๊ธฐ๋Š” ๋ฐ ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ ๋ด‰์ง€์˜ ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

๊ณ„์‚ฐ์ด ๊ท€์ฐฎ์ง€ ์•Š๋„๋ก dp[3]๊ณผ dp[5]๋Š” 1๋กœ ์ดˆ๊ธฐํ™”ํ•ด ์ค€๋‹ค.

dp์˜ ๊ธธ์ด๊ฐ€ (N+1)์ด ์•„๋‹ˆ๋ผ max(6, N+1)์ธ ์ด์œ ๋Š” ์ดˆ๊ธฐํ™” ๊ณผ์ •์—์„œ index ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

 

 

 

6 kg๋ถ€ํ„ฐ N kg๊นŒ์ง€ for๋ฌธ์„ ํ†ตํ•ด ์ˆœํšŒํ•˜๋ฉฐ ํ•„์š”ํ•œ ๋ด‰์ง€์˜ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.

 

# 1   ๋งŒ์•ฝ (n-3) kg์„ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋‹ค๋ฉด, ๊ทธ๊ฒƒ๋ณด๋‹ค ๋ด‰์ง€ ํ•˜๋‚˜๋ฅผ ๋” ์“ฐ๋ฉด ๋œ๋‹ค. dp[n]์„ (dp[n-3]+1)๋กœ ๊ฐฑ์‹ ํ•ด ์ค€๋‹ค.

# 2   ๋งŒ์•ฝ (n-5) kg์„ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋‹ค๋ฉด, dp[n]์„ (dp[n-5]+1)๋กœ ๊ฐฑ์‹ ํ•ด์ค€๋‹ค. ๋‹ค๋งŒ (n-3) kg๋„ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋‹ค๋ฉด, dp[n](์ด๋ฏธ ๊ฐฑ์‹ ํ•จ)๊ณผ (dp[n-5]+1) ์ค‘ ๋” ์ž‘์€ ์ˆ˜์˜ ๋ด‰์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋กœ ๊ฐฑ์‹ ํ•ด ์ค€๋‹ค.

 

 

dp[N]์ด 0์ด๋ผ๋ฉด N kg์˜ ์„คํƒ•์„ ์˜ฎ๊ธธ ์ˆ˜ ์—†๋‹ค๋Š” ์˜๋ฏธ์ด๋ฏ€๋กœ -1์„ ์ถœ๋ ฅํ•˜๊ณ , ์•„๋‹ˆ๋ผ๋ฉด dp[N]์„ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

 

 

N = int(input())
dp = [0] * max(6, N+1)

dp[3], dp[5] = 1, 1

for n in range(6, N+1):
    # 1
    if dp[n-3]:
        dp[n] = dp[n-3] + 1
	
    # 2
    if dp[n-5]:
        if dp[n-3]:
            dp[n] = min(dp[n], dp[n-5] + 1)
        else:
            dp[n] = dp[n-5] + 1

print(dp[N]) if dp[N] else print(-1)

 

 

dp๊ฐ€ ๋” ๊น”๋”ํ•˜๊ณ  ํ‹€๋ฆด ํ™•๋ฅ ๋„ ๋” ๋‚ฎ์•„ ๋ณด์ธ๋‹ค.

 

 

 

 

 

 

 

- ์ˆ˜ํ•™ ํ’€์ด

๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด 3kg ๋ด‰์ง€๋ณด๋‹ค๋Š” 5kg ๋ด‰์ง€๋ฅผ ๋งŽ์ด ์จ์•ผ ํ•œ๋‹ค๋Š” ์ ์—์„œ ์ถœ๋ฐœํ•œ ํ’€์ด์ด๋‹ค.

 

 

#1

์„คํƒ•์˜ ๋ฌด๊ฒŒ๊ฐ€ 5kg๋กœ ๋‚˜๋ˆ  ๋–จ์–ด์งˆ ๋•Œ๊นŒ์ง€ 3kg์”ฉ ๋œ์–ด๋‚ด ๋ณธ๋‹ค.

๋œ์–ด๋‚ด๋ฉด์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ด‰์ง€๋„ ์นด์šดํŒ…ํ•ด ์ค€๋‹ค.

 

๋‚˜๋ˆ  ๋–จ์–ด์ง€์ง€ ์•Š๋”๋ผ๋„ ๋งŒ์•ฝ ๋‚จ์€ ๋ฌด๊ฒŒ๊ฐ€ 5kg ์ดํ•˜๋ผ๋ฉด ์ตœ์ข… ๊ณ„์‚ฐ์„ ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด ์Šคํ†ฑํ•œ๋‹ค.

 

 

# 2

์ตœ์ข… ์ •์‚ฐ์„ ํ•ด์ค€๋‹ค.

 

๋‚จ์€ ์„คํƒ•์˜ ๋ฌด๊ฒŒ๊ฐ€ 5๋กœ ๋‚˜๋ˆ  ๋–จ์–ด์ง„๋‹ค๋ฉด ์„คํƒ•์„ ๋‹ด๊ณ  ๋๋‚ธ๋‹ค.

๊ทธ๋ ‡์ง€ ์•Š๋‹ค๊ณ  ํ•ด๋„ 3์œผ๋กœ ๋‚˜๋ˆ  ๋–จ์–ด์ง„๋‹ค๋ฉด 3kg ๋ด‰์ง€์— ์ž˜ ๋‹ด์•„์„œ ๋งˆ๋ฌด๋ฆฌํ•œ๋‹ค

๋‘˜ ๋‹ค ํ•ด๋‹น๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์ด๋ฏ€๋กœ -1๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

 

N = int(input())
answer = 0

# 1
while N >= 5 and N % 5:
    answer += 1
    N -= 3

# 2
if N % 5 == 0:
    answer += N//5
elif N % 3 == 0:
    answer += N//3
else:
    answer = -1

print(answer)

 

 

 

 

์„คํƒ• ๋ฌด๊ฒŒ์˜ ๋‚˜๋จธ์ง€, ๋ฆฌ์–ผ ์ˆซ์ž๋งŒ์„ ๊ณ ๋ คํ•œ ํ’€์ด๋„ ๊ฐ€๋Šฅํ•˜๊ธด ํ•˜๋‹ค.

์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ธ๊ฐ„์ด ํ•ด์ค€ ๊ฑฐ๋ผ ๊ตฌ๋ฆฌ๊ตฌ๋ฆฌํ•œ ํ’€์ด์ด๋‹ค.

 

N = int(input())
answer = -1

if N % 5 == 0:
    answer = N//5
elif N % 5 == 1:
    answer = (N-6)//5 + 2
elif N % 5 == 2 and N >= 12:
    answer = (N-12)//5 + 4
elif N % 5 == 3:
    answer = (N-3)//5 + 1
elif N % 5 == 4 and N >= 9:
    answer = (N-9)//5 + 3

print(answer)