14916๋ฒ: ๊ฑฐ์ค๋ฆ๋
์ฒซ์งธ ์ค์ ๊ฑฐ์ค๋ฆ๋ ์ก์ n(1 ≤ n ≤ 100,000)์ด ์ฃผ์ด์ง๋ค.
www.acmicpc.net
๋ฌธ์
์ถํฅ์ด๋ ํธ์์ ์นด์ดํฐ์์ ์ผํ๋ค.
์๋์ด 2์์ง๋ฆฌ์ 5์์ง๋ฆฌ๋ก๋ง ๊ฑฐ์ค๋ฆ๋์ ๋ฌ๋ผ๊ณ ํ๋ค. 2์์ง๋ฆฌ ๋์ ๊ณผ 5์์ง๋ฆฌ ๋์ ์ ๋ฌดํ์ ๋ง์ด ๊ฐ์ง๊ณ ์๋ค. ๋์ ์ ๊ฐ์๊ฐ ์ต์๊ฐ ๋๋๋ก ๊ฑฐ์ฌ๋ฌ ์ฃผ์ด์ผ ํ๋ค. ๊ฑฐ์ค๋ฆ๋์ด n์ธ ๊ฒฝ์ฐ, ์ต์ ๋์ ์ ๊ฐ์๊ฐ ๋ช ๊ฐ์ธ์ง ์๋ ค์ฃผ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์๋ฅผ ๋ค์ด, ๊ฑฐ์ค๋ฆ๋์ด 15์์ด๋ฉด 5์์ง๋ฆฌ 3๊ฐ๋ฅผ, ๊ฑฐ์ค๋ฆ๋์ด 14์์ด๋ฉด 5์์ง๋ฆฌ 2๊ฐ์ 2์์ง๋ฆฌ 2๊ฐ๋ก ์ด 4๊ฐ๋ฅผ, ๊ฑฐ์ค๋ฆ๋์ด 13์์ด๋ฉด 5์์ง๋ฆฌ 1๊ฐ์ 2์์ง๋ฆฌ 4๊ฐ๋ก ์ด 5๊ฐ๋ฅผ ์ฃผ์ด์ผ ๋์ ์ ๊ฐ์๊ฐ ์ต์๊ฐ ๋๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๊ฑฐ์ค๋ฆ๋ ์ก์ n(1 ≤ n ≤ 100,000)์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
๊ฑฐ์ค๋ฆ๋ ๋์ ์ ์ต์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค. ๋ง์ฝ ๊ฑฐ์ฌ๋ฌ ์ค ์ ์์ผ๋ฉด -1์ ์ถ๋ ฅํ๋ค.

ํ์ด๊ณผ์
๋ฌธ์ ์ ์กฐ๊ฑด์ ์๋นํ ๊ฐ๋จํ ํธ์ด์๋ค.
์์ ๋ฅผ ํด์ํด๋ณด์๋ฉด 13์ 5์ 1๊ฐ, 2์ 4๊ฐ๋ก ์ด 5๊ฐ๊ฐ ๋๊ณ , 14๋ 5์ 2๊ฐ, 2์ 2๊ฐ๋ก ์ด 4๊ฐ๊ฐ ๋๋ ํ์์ด๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก dpํ์์ผ๋ก ๋ฌธ์ ๋ฅผ ๊ณ์ฐํด์ ํ์ด๋ณด์๊ณ , ๊ทธ๋ฆฌ๋ํ์์ผ๋ก๋ ํ ์ ์์ ๊ฑฐ ๊ฐ์ ์์ฌ์ด ์๊ฒจ ๊ทธ๋ฆฌ๋๋ก๋ ๋ฌธ์ ๋ฅผ ํ์ด๋ณด์๋ค.
code
// dp ํ์ด
#include <iostream>
int dp[100001];
int main(void)
{
int n, count = 0;
std::cin >> n;
dp[1] = -1;
dp[2] = 1;
dp[3] = -1;
dp[4] = 2;
dp[5] = 1;
dp[6] = 3;
dp[7] = 2;
dp[8] = 4;
for (int i = 9; i <= n; i++) {
dp[i] = std::min(dp[i - 5], dp[i - 2]) + 1;
}
std::cout << dp[n];
return (0);
}
// greedy ํ์ด
#include <iostream>
int main(void)
{
int n, count = 0;
std::cin >> n;
if (n % 2 != 0) {
count += 1;
n = n - 5;
}
count += (n / 10) * 2;
count += (n % 10) / 2;
if (n < 0) count = -1;
std::cout << count;
return (0);
}
ํ๊ธฐ
๋ฌธ์ ์์ฒด์ ์กฐ๊ฑด์ด ๊ฐ๋จํด์ ํฌ๊ฒ ์ด๋ ต์ง์๊ฒ ์ ๊ทผ์ ํ๋ ๊ฑฐ ๊ฐ๋ค.
'Algorithm > ๋ฌธ์ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 2293๋ฒ - ๋์ 1 (C++) (0) | 2023.08.26 |
---|---|
[๋ฐฑ์ค] 1327๋ฒ - ์ํธ ๊ฒ์ (C++) (0) | 2023.08.24 |
[๋ฐฑ์ค] 1043๋ฒ - ๊ฑฐ์ง๋ง (C++) (0) | 2023.08.22 |
[๋ฐฑ์ค] 11286๋ฒ - ์ ๋๊ฐ ํ (C++) (0) | 2023.08.21 |
[๋ฐฑ์ค] 1417๋ฒ - ๊ตญํ์์ ์ ๊ฑฐ (C++) (0) | 2023.08.20 |