[λ°±μ€€/C++] 1162번 λ„λ‘œν¬μž₯

2022. 7. 16. 18:14Β·PS/C++
728x90
λ°˜μ‘ν˜•

λ°±μ€€
λ°±μ€€
1162번 λ„λ‘œν¬μž₯


πŸ€”λ¬Έμ œ 이해

1번 μ •μ μ—μ„œ N번 μ •μ κΉŒμ§€ κ°€λŠ” λͺ¨λ“  경둜 쀑에 μ΅œλŒ€ k개의 λ„λ‘œ 이동 μ‹œκ°„μ΄ 0이 λ˜μ—ˆμ„ λ•Œ μ‹œκ°„μ΄ κ°€μž₯ 적게 λ“œλŠ” 경둜의 μ‹œκ°„μ„ κ΅¬ν•˜λŠ” λ¬Έμ œμ΄λ‹€.


πŸ’‘μ²«λ²ˆμ§Έ 아이디어

λ‹€μ΅μŠ€νŠΈλΌ λ¬Έμ œμ΄μ§€λ§Œ λ„λ‘œλ₯Ό 포μž₯ν•΄μ•Ό ν•œλ‹€λŠ” μ μ—μ„œ 더 μ–΄λ €μ› λ‹€. μŠ€ν„°λ”” λ©˜ν† λ‹˜μ΄ κ°€λ₯΄μ³μ€€ 방법은 μ•„λž˜ 풀이와 κ°™λ‹€.

 

πŸ”₯풀이πŸ”₯

μ΅œλ‹¨κ²½λ‘œ λ¬Έμ œμ—μ„œ μ΅œλ‹¨κ±°λ¦¬λ₯Ό μ €μž₯ν•˜λŠ” 1차원 배열을 2차원 λ°°μ—΄λ‘œ λ°”κΎΈμ–΄ dist[i][j]μ—μ„œ jλŠ” λ„λ‘œλ₯Ό 포μž₯ν•œ 횟수λ₯Ό μ˜λ―Έν•œλ‹€.

λ”°λΌμ„œ λ‹€μ΅μŠ€νŠΈλΌλ‘œ κ΅¬ν˜„ν•˜λ˜ j값이 λ¬Έμ œμ—μ„œ μ£Όμ–΄μ§€λŠ” 포μž₯κ°€λŠ₯ν•œ λ„λ‘œμ˜ 개수 k보닀 μž‘μ„ λ•Œ λ„λ‘œλ₯Ό ν•œ 번 포μž₯ν•œ 값을 j+1에 λ„£μ–΄μ£Όκ³  포μž₯ν•˜μ§€ μ•Šμ•˜μ„ λ•Œμ˜ 값을 j에 μ—…λ°μ΄νŠΈ ν•΄μ€€λ‹€.

정점 n에 λ„μ°©ν•˜λ©΄ breakν•΄μ£Όκ³  λ‚˜μ„œλŠ” λ„λ‘œλ₯Ό λͺ‡λ²ˆ 포μž₯ν–ˆμ„ λ•Œ κ°€μž₯ μ΅œμ†ŒμΈμ§€λ₯Ό λΉ„κ΅ν•΄μ„œ μ΅œμ†Ÿκ°’μ„ μ°Ύμ•„μ€€λ‹€. (kλ₯Ό λ‹€ μ“°μ§€ μ•Šκ³ λ„ μ΅œμ†Ÿκ°’μΌ 수 있음)

 

βŒνŠΈλŸ¬λΈ” μŠˆνŒ…

κ°’μ˜ λ²”μœ„λ₯Ό μ œλŒ€λ‘œ ν™•μΈν•˜μ§€ μ•Šμ•„ 값이 μ œλŒ€λ‘œ λ‹΄κΈ°μ§€ μ•Šμ•˜μŒ


#include <iostream>
#include <vector>
#include <queue>
#include <cmath>

#define INF 90000000000
using namespace std;

int n, m, k;
long long dist[10002][21];
vector<vector<pair<int, int>>> edge;

int main() {
    cin.tie(nullptr);
    cout.tie(nullptr);
    ios::sync_with_stdio(false);

    cin >> n >> m >> k;
    for (int i = 1; i <= n; i++) {
        for (int j = 0; j <= k; j++) {
            dist[i][j] = INF;
        }
    }
    int a, b, c;
    edge.resize(n + 1);

    for (int i = 0; i < m; i++) {
        cin >> a >> b >> c;
        edge[a].push_back({b, c});
        edge[b].push_back({a, c});
    }
    priority_queue<pair<long long, pair<int, int>>> pq; //거리, 정점, 포μž₯개수
    pq.push({0, {1, 0}});

    while (!pq.empty()) {
        long long weight = -pq.top().first;
        int vertex = pq.top().second.first;
        int packed = pq.top().second.second;
        pq.pop();
        if (vertex == n) break;
        if (weight > dist[vertex][packed]) continue;

        for (auto e: edge[vertex]) {
            int next = e.first;
            long long cost;
            if (packed < k) {
                cost = 0;
                if (dist[next][packed + 1] > weight + cost) {
                    dist[next][packed + 1] = weight + cost;
                    pq.push({-(weight + cost), {next, packed + 1}});
                }
            }
            cost = e.second;
            if (dist[next][packed] > weight + cost) {
                dist[next][packed] = weight + cost;
                pq.push({-(weight + cost), {next, packed}});
            }
        }
    }
    long long min_cost = INF;
    for (int i = 0; i <= k; i++) {
        if (min_cost > dist[n][i]) min_cost = dist[n][i];
    }
    cout << min_cost;
}

 

πŸ”—μ°Έκ³ ν•  문제

 

[λ°±μ€€/C++] 1753번 μ΅œλ‹¨κ²½λ‘œ

πŸ€”λ¬Έμ œ 이해 μ‹œμž‘μ μ—μ„œ 각 정점을 λ°©λ¬Έν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ μ΅œμ†Œ λΉ„μš©μ„ κ΅¬ν•˜λŠ” λ¬Έμ œμ΄λ‹€. πŸ’‘μ²«λ²ˆμ§Έ 아이디어 λ¬Έμ œκ°€ κ·Έλƒ₯ λ”± λ‹€μ΅μŠ€νŠΈλΌ 문제라 λ‹€μ΅μŠ€νŠΈλΌλ₯Ό μ΄μš©ν–ˆλ‹€. πŸ”₯풀이πŸ”₯ λ‹€μ΅μŠ€νŠΈλΌ

yulee.tistory.com

 

728x90
λ°˜μ‘ν˜•

'PS > C++' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[λ°±μ€€/C++] 2252번 쀄 μ„Έμš°κΈ°  (0) 2022.07.16
[λ°±μ€€/C++] 2056번 μž‘μ—…  (0) 2022.07.16
[λ°±μ€€/C++] 1005번 ACM Craft  (0) 2022.07.16
[λ°±μ€€/C++] 2098번 μ™ΈνŒμ› 순회  (0) 2022.07.16
[λ°±μ€€/C++] 1753번 μ΅œλ‹¨κ²½λ‘œ  (0) 2022.07.15
'PS/C++' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [λ°±μ€€/C++] 2252번 쀄 μ„Έμš°κΈ°
  • [λ°±μ€€/C++] 2056번 μž‘μ—…
  • [λ°±μ€€/C++] 1005번 ACM Craft
  • [λ°±μ€€/C++] 2098번 μ™ΈνŒμ› 순회
yulee_to
yulee_to
  • yulee_to
    yulee
    yulee_to
  • 전체
    였늘
    μ–΄μ œ
    • 전체 κΈ€ (170)
      • CS (2)
        • OS (0)
        • DB (0)
        • Network (2)
      • Develop (1)
        • Spring (9)
        • Java (12)
        • Python (0)
        • Algorithm (0)
        • 기타 (0)
      • PS (39)
        • C++ (39)
        • Java (0)
      • TIL (61)
      • Book (39)
        • μžλ°”μ˜ μ‹  (32)
        • μŠ€ν”„λ§ μž…λ¬Έμ„ μœ„ν•œ μžλ°” 객체 μ§€ν–₯의 원리와 이해 (7)
      • ETC (4)
        • Blog (3)
  • λΈ”λ‘œκ·Έ 메뉴

    • ν™ˆ
    • νƒœκ·Έ
    • λ°©λͺ…둝
  • 링크

  • 곡지사항

  • 인기 κΈ€

  • νƒœκ·Έ

    TiL
    λ©€ν‹°μΊ νΌμŠ€itλΆ€νŠΈμΊ ν”„
    aws
    μžλ°”
    μ—μŠ€λ„·μ‹œμŠ€ν…œ λΆ€νŠΈμΊ ν”„
    ν΄λΌμš°λ“œ ν™œμš© λ„€νŠΈμ›Œν¬ μ—”μ§€λ‹ˆμ–΄ λΆ€νŠΈμΊ ν”„
    μŠ€ν„°λ””
    GodOfJava
    λ°±μ€€
    μŠ€ν”„λ§ μž…λ¬Έ
    λΆ€νŠΈμΊ ν”„ν›„κΈ°
    μ•Œκ³ λ¦¬μ¦˜
    EC2
    μžλ°”μ˜ μ‹ 
    Java
    1일1λ°±μ€€
    객체지ν–₯
    C++
    μ—μŠ€λ„·μ‹œμŠ€ν…œ
    boj
  • 졜근 λŒ“κΈ€

  • 250x250
  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.3
yulee_to
[λ°±μ€€/C++] 1162번 λ„λ‘œν¬μž₯
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”