프로그래밍/코딩테스트
[프로그래머스/그래프] 순위
바토파
2024. 10. 10. 23:01
반응형
문제 주소
https://school.programmers.co.kr/learn/courses/30/lessons/49191
풀이
count를 그래프 입력하면서 갱신하는 것이 아니라 그래프를 다 입력한 후에 갱신하는 것이 핵심이었다.
dfs 할 때 (현재 노드의 count += 이전 노드의 count) 이런 식으로 생각했었는데 그냥 count를 +1씩 해주면 되는 거였다.
코드
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;
void update_count(int index, vector<vector<int>>& graph, unordered_map<int, int>& count, vector<bool>& visited){
visited[index] = true;
for (auto e: graph[index]){
if (!visited[e]){
count[e]++;
update_count(e, graph, count, visited);
}
}
}
int solution(int n, vector<vector<int>> results) {
int answer = 0;
vector<vector<int>> win(n+1, vector<int>()); // 선수A, A가 이긴 선수들
vector<vector<int>> lose(n+1, vector<int>()); // 선수 A, A가 진 선수들
for (auto r : results){
win[r[0]].push_back(r[1]);
lose[r[1]].push_back(r[0]);
}
unordered_map<int, int> win_count;
unordered_map<int, int> lose_count;
for (int i = 1; i <= n; i++) {
vector<bool> visited_win(n + 1, false);
vector<bool> visited_lose(n + 1, false);
update_count(i, win, win_count, visited_win);
update_count(i, lose, lose_count, visited_lose);
}
for (int i = 1; i <= n; i++){
if (win_count[i] + lose_count[i] == n-1){
answer++;
}
}
return answer;
}
반응형