[BOJ] 13549λ² | μ¨λ°κΌμ§ 3 (C++)
2023. 12. 6. 23:00γCoding Test/BOJ
πλ¬Έμ 보λ¬κ°κΈ°
π§π» νμ΄ κ³Όμ
μ΅λ¨ κ²½λ‘ μκ³ λ¦¬μ¦μ μ°μ΅ μ€μ μμ΄, μ λ λ€μ΅μ€νΈλΌ μκ³ λ¦¬μ¦μΌλ‘ νμμ΅λλ€. (λΉμ©μ μμκ° μκΈ° λλ¬Έ)
μμ μμΉλ N, λμ°© μμΉλ Kλ‘ μ£Όμ΄μ§λλ€.
- Nμμ iλ²μ§Έ λ
Έλλ‘ κ°λ λ°μ λλ μ΅μ μκ°μ μ μ₯νλ λ°°μ΄, timesλ₯Ό μ μΈν©λλ€.
λ²μκ° 0 ~ 100,000μ΄λ, μ΄ λ²μλ₯Ό ν¬ν¨ν μ μλ λ§νΌμ ν¬κΈ°λ‘ μ μΈ ν, 무νλ κ°μΌλ‘ μ΄κΈ°νν©λλ€. - times[N] = 0 μΌλ‘ μ΄κΈ°ν ν, <μκ°, λ Έλ> μ 보λ₯Ό λ΄λ μ°μ μμ νμ μμμ μ 보 <0, N>μ λ£μ΅λλ€.
- μ΄λ κ·μΉμ λ°λΌ -1, +1, *2λ₯Ό μ μ©ν λ€μ μμΉ(next)λ₯Ό κ³μ°νκ³ , νμ¬ μκ°μμ λ€μ μμΉλ‘ μ΄λνλ λ° νμν μκ°(0 λλ 1)μ λν nextTimeμ κ³μ°ν©λλ€.
- nextTimeμ΄ κΈ°μ‘΄μ next λ Έλλ‘ μ΄λνλ μκ°λ³΄λ€ λ§λ€λ©΄, λμ΄κ°λλ€.
- κΈ°μ‘΄μ next λ Έλλ‘ μ΄λνλ λ° κ±Έλ¦¬λ μκ° vs νμ¬ λ Έλλ₯Ό κ²½μ ν΄μ next λ Έλλ‘ κ°λ μκ° μ€μ μμ κ²μ times[next]μ λ£κ³ , νμ μ΄ μ 보λ₯Ό λ£μ΅λλ€.
- λ§μ½ next == KλΌλ©΄, times[K] = min(times[K], nextTime) μΌλ‘ κ°±μ ν΄μ€λλ€.
- νκ° λΉ λκΉμ§, 3 ~ 5 κ³Όμ μ λ°λ³΅ν©λλ€.
βοΈ μμ€ μ½λ λ° κ²°κ³Ό
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
#define FAST_IO ios::sync_with_stdio(false); cout.tie(NULL); cin.tie(NULL);
#define MAX 100000
#define INF 1000000000
int Calculate(int node, int i) {
switch(i) {
case 0: return node - 1;
case 1: return node + 1;
case 2: return node * 2;
}
return 0;
}
int FindMinTime(vector<int>& times, int start, int K) {
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
// <μ΅μ μκ°, λ
Έλ>
times[start] = 0;
pq.emplace(0, start);
while (!pq.empty()) {
pair<int, int> current = pq.top();
int time = current.first;
int node = current.second;
pq.pop();
for (int i = 0; i < 3; i++) {
int next = Calculate(node, i);
if (next < 0 or next > MAX or times[next] < time)
continue;
bool isTeleport = (i == 2);
int nextTime = time + !isTeleport;
if (next == K)
times[K] = min(nextTime, times[K]);
if (nextTime < times[next]) {
times[next] = nextTime;
pq.emplace(nextTime, next);
}
}
}
return times[K];
}
int main() {
FAST_IO
int N, K;
cin >> N >> K;
vector<int> times(MAX + 1, INF);
int answer = FindMinTime(times, N, K);
cout << answer;
return 0;
}
728x90
λ°μν
'Coding Test > BOJ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[BOJ] 14502λ² | μ°κ΅¬μ (C++) (0) | 2023.12.13 |
---|---|
[BOJ] 17472λ² | λ€λ¦¬ λ§λ€κΈ° 2 (C++) (0) | 2023.12.12 |
[BOJ] 16928λ² | λ±κ³Ό μ¬λ€λ¦¬ κ²μ (C++) (0) | 2023.12.01 |
[BOJ] 9935λ² | λ¬Έμμ΄ νλ° (C++) (1) | 2023.10.08 |
[BOJ] 2110λ² | 곡μ κΈ° μ€μΉ (C++) (0) | 2023.10.08 |