https://school.programmers.co.kr/learn/courses/30/lessons/49191
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
저는 bfs를 통해 문제를 해결하였습니다.
먼저 이기는 방향과 지는 방향으로 그래프를 저장하였습니다.
각각의 사람에서 bfs를 진행하면서 탐색하는 노드의 개수를 구하였습니다. 이 노드의 개수가 자신을 제외해서 n-1인지를 판별하고 같다면 결과값을 늘려 문제를 해결하였습니다.
import java.util.*;
class Solution {
public int solution(int n, int[][] results) {
int answer = 0;
List<Integer>[] win = new List[n+1];
List<Integer>[] lose = new List[n+1];
for(int i = 0 ; i <= n ; i++){
win[i] = new LinkedList<>();
lose[i] = new LinkedList<>();
}
for(int[] result : results){
win[result[0]].add(result[1]);
lose[result[1]].add(result[0]);
}
for(int i = 1 ; i <= n ; i++){
int cnt = 0;
cnt += bfs(i,win,n);
cnt += bfs(i,lose,n);
if(cnt == n-1){
answer++;
}
}
return answer;
}
private static int bfs(int start, List<Integer>[] list, int n){
Queue<Integer> q = new LinkedList<>();
int cnt = 0;
q.offer(start);
boolean[] visited = new boolean[n+1];
while(!q.isEmpty()){
int now = q.poll();
for(int next : list[now]){
if(!visited[next]){
q.offer(next);
visited[next] = true;
cnt++;
}
}
}
return cnt;
}
}
'알고리즘' 카테고리의 다른 글
프로그래머스 입국심사 (JAVA) (0) | 2023.08.15 |
---|---|
프로그래머스 징검다리 (JAVA) (0) | 2023.08.14 |
프로그래머스 에어컨 (JAVA) (0) | 2023.08.12 |
프로그래머스 택배 배달과 수거하기 (JAVA) (0) | 2023.08.11 |
프로그래머스 파괴되지 않은 건물 (JAVA) (0) | 2023.08.10 |