
1446๋ฒ: ์ง๋ฆ๊ธธ
์ฒซ์งธ ์ค์ ์ง๋ฆ๊ธธ์ ๊ฐ์ N๊ณผ ๊ณ ์๋๋ก์ ๊ธธ์ด D๊ฐ ์ฃผ์ด์ง๋ค. N์ 12 ์ดํ์ธ ์์ ์ ์์ด๊ณ , D๋ 10,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค. ๋ค์ N๊ฐ์ ์ค์ ์ง๋ฆ๊ธธ์ ์์ ์์น, ๋์ฐฉ ์์น, ์ง๋ฆ๊ธธ์ ๊ธธ์ด
www.acmicpc.net
๋ฌธ์
๋งค์ผ ์์นจ, ์ธ์ค์ด๋ ํ๊ต์ ๊ฐ๊ธฐ ์ํด์ ์ฐจ๋ฅผ ํ๊ณ Dํฌ๋ก๋ฏธํฐ ๊ธธ์ด์ ๊ณ ์๋๋ก๋ฅผ ์ง๋๋ค. ์ด ๊ณ ์๋๋ก๋ ์ฌ๊ฐํ๊ฒ ์ปค๋ธ๊ฐ ๋ง์์ ์ ๋ง ์ด์ ํ๊ธฐ๋ ํ๋ค๋ค. ์ด๋ ๋ , ์ธ์ค์ด๋ ์ด ๊ณ ์๋๋ก์ ์ง๋ฆ๊ธธ์ด ์กด์ฌํ๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค. ๋ชจ๋ ์ง๋ฆ๊ธธ์ ์ผ๋ฐฉํตํ์ด๊ณ , ๊ณ ์๋๋ก๋ฅผ ์ญ์ฃผํํ ์๋ ์๋ค.
์ธ์ค์ด๊ฐ ์ด์ ํด์ผ ํ๋ ๊ฑฐ๋ฆฌ์ ์ต์๊ฐ์ ์ถ๋ ฅํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ง๋ฆ๊ธธ์ ๊ฐ์ N๊ณผ ๊ณ ์๋๋ก์ ๊ธธ์ด D๊ฐ ์ฃผ์ด์ง๋ค. N์ 12 ์ดํ์ธ ์์ ์ ์์ด๊ณ , D๋ 10,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค. ๋ค์ N๊ฐ์ ์ค์ ์ง๋ฆ๊ธธ์ ์์ ์์น, ๋์ฐฉ ์์น, ์ง๋ฆ๊ธธ์ ๊ธธ์ด๊ฐ ์ฃผ์ด์ง๋ค. ๋ชจ๋ ์์น์ ๊ธธ์ด๋ 10,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ด ์๋ ์ ์์ด๋ค. ์ง๋ฆ๊ธธ์ ์์ ์์น๋ ๋์ฐฉ ์์น๋ณด๋ค ์๋ค.
์ถ๋ ฅ
์ธ์ค์ด๊ฐ ์ด์ ํด์ผ ํ๋ ๊ฑฐ๋ฆฌ์ ์ต์๊ฐ์ ์ถ๋ ฅํ์์ค.

ํ์ด๊ณผ์
๋ฌธ์ ๋ถํฐ ์ดํด๊ฐ ์ ๊ฐ์ง ์์ ์์ 1๋ฒ๋ถํฐ ํด์์ ํด๋ณด์์ต๋๋ค.
5 150
0 50 10
0 50 20
50 100 10
100 151 10
110 140 90
์์ ๊ฐ์ ํ์์ผ๋ก ์ ๋ ฅ๊ฐ์ด ์ฃผ์ด์ง ๋ 0๋ถํฐ 150๊น์ง ๊ฐ๋ ์ต์๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์์ต๋๋ค.
0 ~ 50 ๊น์ง๋ 10์ด๋ผ๋ ์ง๋ฆ๊ธธ์ ์ฌ์ฉํ๋๊ฒ ํจ์จ์ ์ด๋ ์ฌ์ฉ์ ํ๊ณ 50 ~ 100๊น์ง๋ 10์ด๋ผ๋ ์ง๋ฆ๊ธธ์ ์ฌ์ฉํฉ๋๋ค.
100 ~ 151์ 151๊น์ง ๊ฐ๋ฒ๋ฆฐ ์ํฉ์์๋ ๋ค์ ๋๋์๊ฐ ์ ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๊ณ
110 ~ 140์ ๊ฑฐ๋ฆฌ๊ฐ 90์ด๋ผ ๊ทธ๋ฅ ๊ฐ๋๊ฒ๋ณด๋ค ๊ฑฐ๋ฆฌ๊ฐ ๋ ๋ง์ด ๋ค์ด ํจ์ค๋ฅผ ํ๋ฉด ๋จ์์๋ ์ง๋ฆ๊ธธ์ด ์์ด์ 100 ~ 150์ ๊ทธ๋ฅ ๊ธธ๋ก ๊ฐ๋ฉด
10 + 10 + 50 ์ผ๋ก 70์ด๋ผ๋ ๊ฐ์ด ๋์ค๊ธฐ ๋๋ ๋ฌธ์ ์์ต๋๋ค.
ํด๋น๋ฌธ์ ์์ ์๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ด ๋ฐ์ดํฌ์คํธ๋ผ๋ผ๋ ์๊ณ ๋ฆฌ์ฆ์ ์๊ตฌํ๋ ๋ฌธ์ ๋ผ์ ํด๋น ๊ฐ๋ ์ ์ก๋ ๊ฒ ์๋นํ ์ด๋ ค์ ๋ ๊ฑฐ ๊ฐ์ต๋๋ค.
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ด ํ์์์ต๋๋ค.
์ต์ข ์ ์ผ๋ก ๋ฌธ์ ์์ ์์๋ด์ผํ๋ D(์ต์ข ๋์ฐฉ์ง์ )๊น์ง ๊ฐ๋ ๊ฐ์ฅ ์์ ๊ฐ์ ์ฐพ์์ผ ํ๋ dp์ ๊ฐ์ด ์ด์ ์ ์ง๋์จ ๊ธธ๋ค์ ๋ฐํ์ผ๋ก
์๋ก์ด ๊ธธ๋ค์ ์๋กญ๊ฒ ๊ฐฑ์ ํด๋๊ฐ๋ ๋ฐฉ์์ ์ฌ์ฉํ์์ต๋๋ค.
์ง๋ฆ๊ธธ์ ๋์ฐฉ์ง์ ์ ๊ธฐ์ค์ผ๋ก ์์์ง์ ์ ๋ฐ๋ผ๋ณด๋ฉด ์์์ง์ ๊น์ง ๊ฑธ๋ฆฐ ๊ฑฐ๋ฆฌ + ์ง๋ฆ๊ธธ์ ๊ฑฐ๋ฆฌ๊ฐ ์ง๋ฆ๊ธธ ๋์ฐฉ์ง์ ๊น์ง ์ค ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ๋์ฐฉํ ์ ์๋ ๊ฑฐ๋ฆฌ๋ผ๋ ํ์์ผ๋ก ์ ํ์์ ์ธ์ ๋ฌธ์ ์ ์ ๊ทผ์ ํด๋ณด์์ต๋๋ค.
code
#include <iostream>
#include <algorithm>
#include <vector>
const int INF = 10001;
int m[INF];
std::vector <std::pair<int, int> > vec[INF];
void dijkstra(int d)
{
m[0] = 0;
for (int i = 1; i <= d; i++) {
m[i] = m[i - 1] + 1;
for (int j = 0; j < (int)vec[i].size(); j++) {
m[i] = std::min(m[i], m[vec[i][j].first] + vec[i][j].second);
}
}
}
int main(void)
{
int n, d, u, v, num;
std::cin >> n >> d;
std::fill_n(m, INF, INF);
for (int i = 0; i < n; i++) {
std::cin >> u >> v >> num;
if (d < v || v - u < num) continue;
vec[v].push_back(std::make_pair(u, num));
}
dijkstra(d);
std::cout << m[d];
return (0);
}

ํ๊ธฐ
๋ฐ์ดํฌ์คํธ๋ผ๋ ๋ญ๊ฐ dp๋ ์ ์ฌํ๋ค๋ผ๋ ๋๋์ ๋ง์ด ๋ฐ์๋ ๊ฑฐ ๊ฐ๋ค.
์ฒ์ ์ ํด๋ด์ ๊ทธ๋ฐ์ง ์ด๋ป๊ฒ ์ ๊ทผ์ ํด์ผํ ์ง ๋๋ฌด ์ด๋ ต๋ค๋ ๋๋์ ๋ฐ์์๋ค.
'Algorithm > ๋ฌธ์ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 24039๋ฒ - 2021์ ๋ฌด์์ด ํน๋ณํ ๊น? (C++) (0) | 2023.09.01 |
---|---|
[๋ฐฑ์ค] 15719๋ฒ - ์ค๋ณต๋ ์ซ์ (C++) (0) | 2023.08.31 |
[๋ฐฑ์ค] 18352๋ฒ - ํน์ ๊ฑฐ๋ฆฌ์ ๋์ ์ฐพ๊ธฐ (C++) (0) | 2023.08.30 |
[๋ฐฑ์ค] 1543๋ฒ - ๋ฌธ์ ๊ฒ์ (JS) (1) | 2023.08.28 |
[๋ฐฑ์ค] 2225๋ฒ - ํฉ๋ถํด (C++) (0) | 2023.08.27 |

1446๋ฒ: ์ง๋ฆ๊ธธ
์ฒซ์งธ ์ค์ ์ง๋ฆ๊ธธ์ ๊ฐ์ N๊ณผ ๊ณ ์๋๋ก์ ๊ธธ์ด D๊ฐ ์ฃผ์ด์ง๋ค. N์ 12 ์ดํ์ธ ์์ ์ ์์ด๊ณ , D๋ 10,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค. ๋ค์ N๊ฐ์ ์ค์ ์ง๋ฆ๊ธธ์ ์์ ์์น, ๋์ฐฉ ์์น, ์ง๋ฆ๊ธธ์ ๊ธธ์ด
www.acmicpc.net
๋ฌธ์
๋งค์ผ ์์นจ, ์ธ์ค์ด๋ ํ๊ต์ ๊ฐ๊ธฐ ์ํด์ ์ฐจ๋ฅผ ํ๊ณ Dํฌ๋ก๋ฏธํฐ ๊ธธ์ด์ ๊ณ ์๋๋ก๋ฅผ ์ง๋๋ค. ์ด ๊ณ ์๋๋ก๋ ์ฌ๊ฐํ๊ฒ ์ปค๋ธ๊ฐ ๋ง์์ ์ ๋ง ์ด์ ํ๊ธฐ๋ ํ๋ค๋ค. ์ด๋ ๋ , ์ธ์ค์ด๋ ์ด ๊ณ ์๋๋ก์ ์ง๋ฆ๊ธธ์ด ์กด์ฌํ๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค. ๋ชจ๋ ์ง๋ฆ๊ธธ์ ์ผ๋ฐฉํตํ์ด๊ณ , ๊ณ ์๋๋ก๋ฅผ ์ญ์ฃผํํ ์๋ ์๋ค.
์ธ์ค์ด๊ฐ ์ด์ ํด์ผ ํ๋ ๊ฑฐ๋ฆฌ์ ์ต์๊ฐ์ ์ถ๋ ฅํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ง๋ฆ๊ธธ์ ๊ฐ์ N๊ณผ ๊ณ ์๋๋ก์ ๊ธธ์ด D๊ฐ ์ฃผ์ด์ง๋ค. N์ 12 ์ดํ์ธ ์์ ์ ์์ด๊ณ , D๋ 10,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค. ๋ค์ N๊ฐ์ ์ค์ ์ง๋ฆ๊ธธ์ ์์ ์์น, ๋์ฐฉ ์์น, ์ง๋ฆ๊ธธ์ ๊ธธ์ด๊ฐ ์ฃผ์ด์ง๋ค. ๋ชจ๋ ์์น์ ๊ธธ์ด๋ 10,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ด ์๋ ์ ์์ด๋ค. ์ง๋ฆ๊ธธ์ ์์ ์์น๋ ๋์ฐฉ ์์น๋ณด๋ค ์๋ค.
์ถ๋ ฅ
์ธ์ค์ด๊ฐ ์ด์ ํด์ผ ํ๋ ๊ฑฐ๋ฆฌ์ ์ต์๊ฐ์ ์ถ๋ ฅํ์์ค.

ํ์ด๊ณผ์
๋ฌธ์ ๋ถํฐ ์ดํด๊ฐ ์ ๊ฐ์ง ์์ ์์ 1๋ฒ๋ถํฐ ํด์์ ํด๋ณด์์ต๋๋ค.
5 150
0 50 10
0 50 20
50 100 10
100 151 10
110 140 90
์์ ๊ฐ์ ํ์์ผ๋ก ์ ๋ ฅ๊ฐ์ด ์ฃผ์ด์ง ๋ 0๋ถํฐ 150๊น์ง ๊ฐ๋ ์ต์๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์์ต๋๋ค.
0 ~ 50 ๊น์ง๋ 10์ด๋ผ๋ ์ง๋ฆ๊ธธ์ ์ฌ์ฉํ๋๊ฒ ํจ์จ์ ์ด๋ ์ฌ์ฉ์ ํ๊ณ 50 ~ 100๊น์ง๋ 10์ด๋ผ๋ ์ง๋ฆ๊ธธ์ ์ฌ์ฉํฉ๋๋ค.
100 ~ 151์ 151๊น์ง ๊ฐ๋ฒ๋ฆฐ ์ํฉ์์๋ ๋ค์ ๋๋์๊ฐ ์ ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๊ณ
110 ~ 140์ ๊ฑฐ๋ฆฌ๊ฐ 90์ด๋ผ ๊ทธ๋ฅ ๊ฐ๋๊ฒ๋ณด๋ค ๊ฑฐ๋ฆฌ๊ฐ ๋ ๋ง์ด ๋ค์ด ํจ์ค๋ฅผ ํ๋ฉด ๋จ์์๋ ์ง๋ฆ๊ธธ์ด ์์ด์ 100 ~ 150์ ๊ทธ๋ฅ ๊ธธ๋ก ๊ฐ๋ฉด
10 + 10 + 50 ์ผ๋ก 70์ด๋ผ๋ ๊ฐ์ด ๋์ค๊ธฐ ๋๋ ๋ฌธ์ ์์ต๋๋ค.
ํด๋น๋ฌธ์ ์์ ์๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ด ๋ฐ์ดํฌ์คํธ๋ผ๋ผ๋ ์๊ณ ๋ฆฌ์ฆ์ ์๊ตฌํ๋ ๋ฌธ์ ๋ผ์ ํด๋น ๊ฐ๋ ์ ์ก๋ ๊ฒ ์๋นํ ์ด๋ ค์ ๋ ๊ฑฐ ๊ฐ์ต๋๋ค.
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ด ํ์์์ต๋๋ค.
์ต์ข ์ ์ผ๋ก ๋ฌธ์ ์์ ์์๋ด์ผํ๋ D(์ต์ข ๋์ฐฉ์ง์ )๊น์ง ๊ฐ๋ ๊ฐ์ฅ ์์ ๊ฐ์ ์ฐพ์์ผ ํ๋ dp์ ๊ฐ์ด ์ด์ ์ ์ง๋์จ ๊ธธ๋ค์ ๋ฐํ์ผ๋ก
์๋ก์ด ๊ธธ๋ค์ ์๋กญ๊ฒ ๊ฐฑ์ ํด๋๊ฐ๋ ๋ฐฉ์์ ์ฌ์ฉํ์์ต๋๋ค.
์ง๋ฆ๊ธธ์ ๋์ฐฉ์ง์ ์ ๊ธฐ์ค์ผ๋ก ์์์ง์ ์ ๋ฐ๋ผ๋ณด๋ฉด ์์์ง์ ๊น์ง ๊ฑธ๋ฆฐ ๊ฑฐ๋ฆฌ + ์ง๋ฆ๊ธธ์ ๊ฑฐ๋ฆฌ๊ฐ ์ง๋ฆ๊ธธ ๋์ฐฉ์ง์ ๊น์ง ์ค ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ๋์ฐฉํ ์ ์๋ ๊ฑฐ๋ฆฌ๋ผ๋ ํ์์ผ๋ก ์ ํ์์ ์ธ์ ๋ฌธ์ ์ ์ ๊ทผ์ ํด๋ณด์์ต๋๋ค.
code
#include <iostream>
#include <algorithm>
#include <vector>
const int INF = 10001;
int m[INF];
std::vector <std::pair<int, int> > vec[INF];
void dijkstra(int d)
{
m[0] = 0;
for (int i = 1; i <= d; i++) {
m[i] = m[i - 1] + 1;
for (int j = 0; j < (int)vec[i].size(); j++) {
m[i] = std::min(m[i], m[vec[i][j].first] + vec[i][j].second);
}
}
}
int main(void)
{
int n, d, u, v, num;
std::cin >> n >> d;
std::fill_n(m, INF, INF);
for (int i = 0; i < n; i++) {
std::cin >> u >> v >> num;
if (d < v || v - u < num) continue;
vec[v].push_back(std::make_pair(u, num));
}
dijkstra(d);
std::cout << m[d];
return (0);
}

ํ๊ธฐ
๋ฐ์ดํฌ์คํธ๋ผ๋ ๋ญ๊ฐ dp๋ ์ ์ฌํ๋ค๋ผ๋ ๋๋์ ๋ง์ด ๋ฐ์๋ ๊ฑฐ ๊ฐ๋ค.
์ฒ์ ์ ํด๋ด์ ๊ทธ๋ฐ์ง ์ด๋ป๊ฒ ์ ๊ทผ์ ํด์ผํ ์ง ๋๋ฌด ์ด๋ ต๋ค๋ ๋๋์ ๋ฐ์์๋ค.
'Algorithm > ๋ฌธ์ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 24039๋ฒ - 2021์ ๋ฌด์์ด ํน๋ณํ ๊น? (C++) (0) | 2023.09.01 |
---|---|
[๋ฐฑ์ค] 15719๋ฒ - ์ค๋ณต๋ ์ซ์ (C++) (0) | 2023.08.31 |
[๋ฐฑ์ค] 18352๋ฒ - ํน์ ๊ฑฐ๋ฆฌ์ ๋์ ์ฐพ๊ธฐ (C++) (0) | 2023.08.30 |
[๋ฐฑ์ค] 1543๋ฒ - ๋ฌธ์ ๊ฒ์ (JS) (1) | 2023.08.28 |
[๋ฐฑ์ค] 2225๋ฒ - ํฉ๋ถํด (C++) (0) | 2023.08.27 |