Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- 백준 1103번 c++
- 유니티
- Beakjoon
- C#
- 17070번
- 백준 17070번
- 백준 c++ 2870번
- 오브젝트 풀링
- 2870번 c++
- 수학숙제
- 2870번 수학숙제 c++
- 백준 2870번
- 백준 1103번 게임
- Algorithm
- 코테
- 백준
- 코딩테스트
- 2468 c++
- c++
- Unity
- Lv.3
- Lv2
- 2870번
- 2870번 수학숙제
- 백준 c++ 2468번
- 백준 1103번
- 플레이어 이동
- dfs
- 백준 17070번 c++
- 프로그래머스
Archives
- Today
- Total
주녘공부일지
[프로그래머스 C#] Lv.2 배달 본문
https://school.programmers.co.kr/learn/courses/30/lessons/12978
1. 정답코드 및 핵심 아이디어, 유의사항
- 정점 (마을)
- 간선 (마을 간 이동가능 여부)
- 가중치 (간선을 지나가는 데 필요한 이동시간)
1번 정점과 특정 거리 이상 떨어져있지 않은 정점의 개수를 구하는 문제 (다익스트라 알고리즘)
- 1번 정점과의 거리를 나타내는 1차원 배열을 선언 ( int[] intArray ) // 최단거리배열
- 최초에 탐색 없이 알 수 있는 정보인 1번 정점부터 탐색을 시작
- 1번 정점과 이어진 간선을 찾아서 최단거리배열 최소 값을 확인해 갱신
- 갱신된 정점은 다음 탐색 대상으로 지정하여 탐색 대상이 없을 때까지 순회
Breadth First Search
다익스트라 알고리즘
- Dynamic Programming (DP) 과 Breadth First Search (BFS) 를 활용한 알고리즘
https://godgjwnsgur7.tistory.com/109
주석 참조
using System;
using System.Collections.Generic;
class Solution
{
public int solution(int N, int[,] road, int K)
{
int answer = 0;
var intArray = new int[N + 1]; // 최단거리(최단시간)배열
var queue = new Queue<int>(); // 탐색대상 큐
// 초기 값 세팅
for (int i = 0; i < intArray.Length; i++)
intArray[i] = K + 1; // K보다 큰 수는 의미가 없으므로
intArray[1] = 0; // 자기자신과의 거리는 0
queue.Enqueue(1); // 유일하게 알고 있는 정점부터 탐색
// 갱신 대상이 없을 때까지 순회
while (queue.Count > 0)
{
int n = queue.Dequeue(); // 갱신 대상 마을 번호
// 갱신 대상과 연결된 간선을 탐색 (탐색 마을번호 i)
for (int i = 0; i < road.GetLength(0); i++)
{
int n1 = road[i, 0]; // 1번 마을 번호
int n2 = road[i, 1]; // 2번 마을 번호
int dir = road[i, 2]; // 1번 마을 <-> 2번 마을
// 연결된 간선을 찾았다면 최소 값인지 체크해서 갱신
if (n == n1 && intArray[n2] > dir + intArray[n1])
{
intArray[n2] = dir + intArray[n1];
queue.Enqueue(n2); // 갱신되었으므로 탐색 대상
}
else if (n == n2 && intArray[n1] > dir + intArray[n2])
{
intArray[n1] = dir + intArray[n2];
queue.Enqueue(n1); // 갱신되었으므로 탐색 대상
}
}
}
foreach (int num in intArray)
if (num <= K)
answer++;
return answer;
}
}
'CodingTest > Programmers Lv.2' 카테고리의 다른 글
[프로그래머스 C#] Lv.2 미로 탈출 (1) | 2023.12.27 |
---|---|
[프로그래머스 C#] Lv.2 택배 배달과 수거하기 (0) | 2023.12.25 |
[프로그래머스 C#] Lv.2 멀리 뛰기 (0) | 2023.12.12 |
[프로그래머스 C#] Lv.2 프로세스 (0) | 2023.12.11 |
[프로그래머스 C#] Lv.2 의상 (1) | 2023.12.11 |