728x90
반응형
📌 문제 설명
강철부대의 각 부대원이 여러 지역에 뿔뿔이 흩어져 특수 임무를 수행 중입니다. 지도에서 강철부대가 위치한 지역을 포함한 각 지역은 유일한 번호로 구분되며, 두 지역 간의 길을 통과하는 데 걸리는 시간은 모두 1로 동일합니다. 임무를 수행한 각 부대원은 지도 정보를 이용하여 최단시간에 부대로 복귀하고자 합니다. 다만 적군의 방해로 인해, 임무의 시작 때와 다르게 되돌아오는 경로가 없어져 복귀가 불가능한 부대원도 있을 수 있습니다.
강철부대가 위치한 지역을 포함한 총지역의 수 n, 두 지역을 왕복할 수 있는 길 정보를 담은 2차원 정수 배열 roads, 각 부대원이 위치한 서로 다른 지역들을 나타내는 정수 배열 sources, 강철부대의 지역 destination이 주어졌을 때, 주어진 sources의 원소 순서대로 강철부대로 복귀할 수 있는 최단시간을 담은 배열을 return하는 solution 함수를 완성해주세요. 복귀가 불가능한 경우 해당 부대원의 최단시간은 -1입니다.
📌 제한 사항
- 3 ≤ n ≤ 100,000
- 각 지역은 정수 1부터 n까지의 번호로 구분됩니다.
- 2 ≤ roads의 길이 ≤ 500,000
- roads의 원소의 길이 = 2
- roads의 원소는 [a, b] 형태로 두 지역 a, b가 서로 왕복할 수 있음을 의미합니다.(1 ≤ a, b ≤ n, a ≠ b)
- 동일한 정보가 중복해서 주어지지 않습니다.
- 동일한 [a, b]가 중복해서 주어지지 않습니다.
- [a, b]가 있다면 [b, a]는 주어지지 않습니다.
- 1 ≤ sources의 길이 ≤ 500
- 1 ≤ sources[i] ≤ n
- 1 ≤ destination ≤ n
📌 입출력 예
n | roads | sources | destination | result |
3 | [[1, 2], [2, 3]] | [2, 3] | 1 | [1, 2] |
5 | [[1, 2], [1, 4], [2, 4], [2, 5], [4, 5]] | [1, 3, 5] | 5 | [2, -1, 0] |
🔗 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/132266
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
반응형
💡 풀이 아이디어
- 인접 리스트와 BFS 탐색
📝 최종 풀이
- 주어진 roads를 인접리스트 형식으로 저장합니다.
- 도착지와 출발지의 거리를 나타낼 distance를 -1로 초기화합니다.
- 도착지를 시작으로 BFS 탐색을 시작합니다.
- 아직 방문하지 않은 노드(distance == -1)를 순차적으로 방문하고 거리를 갱신합니다.
- sources의 최단 거리를 answer에 push_back 한 후 return 합니다.
728x90
👩💻 코드
#include <string>
#include <vector>
#include <queue>
#include <iostream>
using namespace std;
vector<int> solution(int n, vector<vector<int>> roads, vector<int> sources, int destination) {
vector<int> answer;
vector<int> distance(n+1, -1);
vector<vector<int>> graph(n+1);
queue<int> q;
for(auto &road : roads){
int s = road[0];
int e = road[1];
graph[s].push_back(e);
graph[e].push_back(s);
}
q.push(destination);
distance[destination] = 0;
while(!q.empty()){
int node = q.front();
q.pop();
for(int neighbor : graph[node]){
if (distance[neighbor] == -1){
distance[neighbor] = distance[node] + 1;
q.push(neighbor);
}
}
}
for(auto source : sources){
answer.push_back(distance[source]);
}
return answer;
}
728x90
반응형
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] [1차] 셔틀버스 (1) | 2024.11.30 |
---|---|
[프로그래머스] 가장 긴 팰린드롬 (0) | 2024.11.29 |
[프로그래머스] 경주로 건설 (1) | 2024.11.28 |
[프로그래머스] 디스크 컨트롤러 (0) | 2024.11.28 |
[프로그래머스] 연속 펄스 부분 수열의 합 (0) | 2024.11.27 |