μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- μ½ν
- κ³Όμ ν μ€νΈ
- TypeScript
- νλ‘κ·Έλλ¨Έμ€
- μ½λ ν¬λ©§
- DP
- μλ°μ€ν¬λ¦½νΈ
- λΈλ£¨νΈν¬μ€
- js
- Node.js
- μΉ΄μΉ΄μ€
- React
- custom hook
- μκ³ λ¦¬μ¦
- λΆμ€νΈμΊ νμΉλͺ¨λ°μΌ
- λ°±μ€
- svgνμΌ λ€λ£¨κΈ°
- μ΄λΆνμ
- 리λμ€ ν΄ν·
- icecandidate
- μλ°©ν₯ μ°κ²° 리μ€νΈ
- λμ κ³νλ²
- JavaScript
- μ΄λ―Έμ§ μμ
- λΆμ€νΈμ»¨νΌλ°μ€
- μ½λ©ν μ€νΈ
- Redux toolkit
- λλκ·Έ μ΄λ²€νΈ
- router v6
- μΉ΄μΉ΄μ€μ±μ©
- Today
- Total
π₯ dev-ruby
[νλ‘κ·Έλλ¨Έμ€] λ°°λ¬ - Lv.2 javascript <Summer/Winter ~2018> λ³Έλ¬Έ
[νλ‘κ·Έλλ¨Έμ€] λ°°λ¬ - Lv.2 javascript <Summer/Winter ~2018>
ruby_s 2021. 11. 25. 21:13λ¬Έμ μ€λͺ
Nκ°μ λ§μλ‘ μ΄λ£¨μ΄μ§ λλΌκ° μμ΅λλ€. μ΄ λλΌμ κ° λ§μμλ 1λΆν° NκΉμ§μ λ²νΈκ° κ°κ° νλμ© λΆμ¬λμ΄ μμ΅λλ€. κ° λ§μμ μλ°©ν₯μΌλ‘ ν΅νν μ μλ λλ‘λ‘ μ°κ²°λμ΄ μλλ°, μλ‘ λ€λ₯Έ λ§μ κ°μ μ΄λν λλ μ΄ λλ‘λ₯Ό μ§λμΌ ν©λλ€. λλ‘λ₯Ό μ§λ λ 걸리λ μκ°μ λλ‘λ³λ‘ λ€λ¦ λλ€. νμ¬ 1λ² λ§μμ μλ μμμ μμ κ° λ§μλ‘ μμ λ°°λ¬μ νλ €κ³ ν©λλ€. κ° λ§μλ‘λΆν° μμ μ£Όλ¬Έμ λ°μΌλ €κ³ νλλ°, Nκ°μ λ§μ μ€μμ K μκ° μ΄νλ‘ λ°°λ¬μ΄ κ°λ₯ν λ§μμμλ§ μ£Όλ¬Έμ λ°μΌλ €κ³ ν©λλ€. λ€μμ N = 5, K = 3μΈ κ²½μ°μ μμμ λλ€.
![](https://blog.kakaocdn.net/dn/mbaL1/btrl8nHV6mK/5U8AajQcBhAHyZFGuYeq9K/img.png)
μ κ·Έλ¦Όμμ 1λ² λ§μμ μλ μμμ μ [1, 2, 4, 5] λ² λ§μκΉμ§λ 3 μ΄νμ μκ°μ λ°°λ¬ν μ μμ΅λλ€. κ·Έλ¬λ 3λ² λ§μκΉμ§λ 3μκ° μ΄λ΄λ‘ λ°°λ¬ν μ μλ κ²½λ‘κ° μμΌλ―λ‘ 3λ² λ§μμμλ μ£Όλ¬Έμ λ°μ§ μμ΅λλ€. λ°λΌμ 1λ² λ§μμ μλ μμμ μ΄ λ°°λ¬ μ£Όλ¬Έμ λ°μ μ μλ λ§μμ 4κ°κ° λ©λλ€.
λ§μμ κ°μ N, κ° λ§μμ μ°κ²°νλ λλ‘μ μ 보 road, μμ λ°°λ¬μ΄ κ°λ₯ν μκ° Kκ° λ§€κ°λ³μλ‘ μ£Όμ΄μ§ λ, μμ μ£Όλ¬Έμ λ°μ μ μλ λ§μμ κ°μλ₯Ό return νλλ‘ solution ν¨μλ₯Ό μμ±ν΄μ£ΌμΈμ.
μ νμ¬ν
- λ§μμ κ°μ Nμ 1 μ΄μ 50 μ΄νμ μμ°μμ λλ€.
- roadμ κΈΈμ΄(λλ‘ μ 보μ κ°μ)λ 1 μ΄μ 2,000 μ΄νμ λλ€.
- roadμ κ° μμλ λ§μμ μ°κ²°νκ³ μλ κ° λλ‘μ μ 보λ₯Ό λνλ λλ€.
- roadλ κΈΈμ΄κ° 3μΈ λ°°μ΄μ΄λ©°, μμλλ‘ (a, b, c)λ₯Ό λνλ
λλ€.
- a, b(1 ≤ a, b ≤ N, a != b)λ λλ‘κ° μ°κ²°νλ λ λ§μμ λ²νΈμ΄λ©°, c(1 ≤ c ≤ 10,000, cλ μμ°μ)λ λλ‘λ₯Ό μ§λλλ° κ±Έλ¦¬λ μκ°μ λλ€.
- λ λ§μ a, bλ₯Ό μ°κ²°νλ λλ‘λ μ¬λ¬ κ°κ° μμ μ μμ΅λλ€.
- ν λλ‘μ μ λ³΄κ° μ¬λ¬ λ² μ€λ³΅ν΄μ μ£Όμ΄μ§μ§ μμ΅λλ€.
- Kλ μμ λ°°λ¬μ΄ κ°λ₯ν μκ°μ λνλ΄λ©°, 1 μ΄μ 500,000 μ΄νμ λλ€.
- μμμ λ λ§μκ°μ νμ μ΄λ κ°λ₯ν κ²½λ‘κ° μ‘΄μ¬ν©λλ€.
- 1λ² λ§μμ μλ μμμ μ΄ K μ΄νμ μκ°μ λ°°λ¬μ΄ κ°λ₯ν λ§μμ κ°μλ₯Ό return νλ©΄ λ©λλ€.
μ μΆλ ₯ μ
N | road | K | result |
5 | [[1,2,1],[2,3,3],[5,2,2],[1,4,2],[5,3,1],[5,4,2]] | 3 | 4 |
6 | [[1,2,1],[1,3,2],[2,3,2],[3,4,3],[3,5,2],[3,5,3],[5,6,1]] | 4 | 4 |
μ μΆλ ₯ μ μ€λͺ
μ μΆλ ₯ μ #
1λ¬Έμ μ μμμ κ°μ΅λλ€.
μ μΆλ ₯ μ #2
μ£Όμ΄μ§ λ§μκ³Ό λλ‘μ λͺ¨μμ μλ κ·Έλ¦Όκ³Ό κ°μ΅λλ€.
1λ² λ§μμμ λ°°λ¬μ 4μκ° μ΄νκ° κ±Έλ¦¬λ λ§μμ [1, 2, 3, 5] 4κ°μ΄λ―λ‘ 4λ₯Ό return ν©λλ€.
λ΄κ° νΌ νμ΄
: μ ννμ λ°©λ²
let n = 0;
let distance = []; // μμ μμΉλ‘λΆν° κ° λ§μκΉμ§ μ΅μκΈΈμ΄
let visited = []; // λ°©λ¬Έν λ§μ
let graph = [];
function getSmallIdx(){
let min = Infinity;
let idx = 0;
for(let i=0; i< n; i++){
if(distance[i] < min && !visited[i]){ // λ°©λ¬Ένμ§ μλ λ§μ μ€μμ
min = distance[i]; // κ°μ₯ μμ κΈΈμ΄λ₯Ό κ°λ λ§μμ μΈλ±μ€ 리ν΄
idx = i;
}
}
return idx;
}
function dijkstra(start){
for(let i=0; i<n; i++)
distance[i] = graph[start][i]; // μμ μμΉμμ κ° λ§μκΉμ§ μ΄κΈ° κΈΈμ΄
visited[start] = true;
for(let i=0; i<n; i++){
const curr = getSmallIdx(); // μμ μμΉλ‘λΆν° λ°©λ¬Ένμ§ μμ λ§μ μ€ μμ κΈΈμ΄λ₯Ό κ°μ§λ λ§μ
visited[curr] = true;
for(let j=0; j<n; j++){
if(!visited[j] && distance[curr] + graph[curr][j] < distance[j]){ // λ°©λ¬Έ νμ§ μμ λ§μμ΄κ³ , κΈ°μ‘΄ κΈΈμ΄ λ³΄λ€ currλ§μμ κ±°μ³κ°λ κ² λ 짧μ κ²½μ°
distance[j] = distance[curr] + graph[curr][j]; // μ
λ°μ΄νΈ
}
}
}
}
function solution(N, road, K) {
n = N;
graph = Array.from(Array(n), () => new Array(n).fill(0)).map((x, i)=>x.map((y, j)=>{if(i === j) return 0; else return Infinity;})); // μμ μ κ²½λ‘μ κΈΈμ΄λ 0μΌλ‘ λλ¨Έμ§λ 무νλλ‘
road.forEach((pair)=>{
if(graph[pair[0]-1][pair[1]-1] > pair[2]) // λ μμ κ²½λ‘μΌ κ²½μ°
graph[pair[0]-1][pair[1]-1] = pair[2]; // μ
λ°μ΄νΈ
if(graph[pair[1]-1][pair[0]-1] > pair[2])
graph[pair[1]-1][pair[0]-1] = pair[2];
});
dijkstra(0); // μμμμΉ 0μμ λ€μ΅μ€νΈλΌ μμ
return distance.reduce((acc, curr)=>acc+(curr <= K), 0); // Kμκ° μ΄ν κ°μ 리ν΄
}
: μ°μ μμ ν λ°©λ²
function solution(N, road, K) {
const pq = [];
const dist = Array(N).fill(Infinity);
const graph = Array.from(Array(N), () => new Array(N).fill(0)).map((x, i)=>x.map((y, j)=>{if(i === j) return 0; else return Infinity;}));
road.forEach(([a, b, w]) => {
if(graph[a-1][b-1] > w) graph[a-1][b-1] = w;
if(graph[b-1][a-1] > w) graph[b-1][a-1] = w;
});
dist[0] = 0;
pq.push([0, 0]);
while(pq.length > 0){
const [node, weight] = pq.pop();
if(dist[node] < weight) continue;
for(let i=0; i<N; i++){
const nextWeight = graph[node][i];
if(dist[i] > weight + nextWeight){
dist[i] = weight + nextWeight;
pq.push([i, dist[i]]);
}
}
}
return dist.filter((v)=> v<=K).length;
}
λ€λ€ 보λκΉ objectλ‘ adjλ³μμ λ£μ΄μ£Όλλ°,, κ·Έλ κ² νλκ² μ°μ μμ νμ μλλ λ°©μμΈκ° μ λͺ¨λ₯΄κ² λΉ ..
λ κ·Έλ₯ 2μ°¨μ λ°°μ΄λ‘ ꡬννλλ°, μ€ν μκ° μΈ‘λ©΄μμ μ΄κ² λ 짧μλ€.. objectκ° μ’ λλ¦°κ°?