알고리즘 공부/문제 풀이
[프로그래머스] 그래프 - 순위
valid_ming
2020. 9. 1. 23:11
그래프의 개념보다는 set의 개념을 이용하여 문제를 풀었다..
[프로그래머스] 순위 문제풀이 (Java)
[프로그래머스] 순위 문제풀이 (Java)
velog.io
를 참고하여 코드는 내가 작성한 것이다.
package algorithmStudy;
import java.util.*;
class Player{
Set<Integer> win=new HashSet<>(); //player한테 이긴사람
Set<Integer> lose=new HashSet<>(); //player 진사람
}
public class graph2 {
static int solution(int n, int[][] results) {
int answer = 0;
Player[] players=new Player[n+1];
//player배열 초기화
for(int i=0;i<n+1;i++) {
players[i]=new Player();
}
for(int i=0;i<results.length;i++) {
int winner=results[i][0];
int loser=results[i][1];
//결과를 추가
players[loser].win.add(winner);
players[winner].lose.add(loser);
//winner를 이긴사람들을 players[loser].win에 추가
players[loser].win.addAll(players[winner].win);
//loser한테 진사람들을 players[winner].lose에 추가
players[winner].lose.addAll(players[loser].lose);
}
for(int i=results.length-1;i>=0;i--) {
int winner=results[i][0];
int loser=results[i][1];
//winner를 이긴사람들을 players[loser].win에 추가
players[loser].win.addAll(players[winner].win);
//loser한테 진사람들을 players[winner].lose에 추가
players[winner].lose.addAll(players[loser].lose);
}
for(int i=0;i<=n;i++) {
if(players[i].win.size()+players[i].lose.size() ==n-1)
answer++;
}
return answer;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int n=5;
int[][] results= {{4,3},{4,2},{3,2},{1,2},{2,5}};
System.out.println(solution(n,results));
}
}
d한방향으로만 탐색하면.. 혹시 비는 부분이 있을까 싶어서 반대 방향으로도 탐색햇다.
한 방향 탐색시 30점이었고, 양 방향 탐색 추가시 60점.. 이외는 왜 틀린지 모르겠다..
(테스트 케이스 공개해주세여 ㅠㅠ)