https://programmers.co.kr/learn/courses/30/lessons/49191
코딩테스트 연습 - 순위
5 [[4, 3], [4, 2], [3, 2], [1, 2], [2, 5]] 2
programmers.co.kr
|
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
package justStudying;
import java.util.LinkedList;
public class test2_20220206 {
static class Player {
int mIdx; //나
int rank; //순위
int total; //토탈판수
int played; //플레이판수
LinkedList<Integer> winList = new LinkedList<Integer>(); //내가이긴상대
LinkedList<Integer> loseList = new LinkedList<Integer>(); //내가진상대
public Player(int m, int t) { //나idx,순위가 판정되는 토탈판수
mIdx = m;
total = t;
}
public void win(int d) { //이김
if(!winList.contains(d)) { //안들어가있으면
winList.add(d);
played++;
}
getRank();
}
public void lose(int d) { //짐
if(!loseList.contains(d)) { //안들어가있으면
loseList.add(d);
played++;
}
getRank();
}
public int getRank() { //순위매기기
if(total == played) {
rank = total - winList.size() + 1;
// System.out.println(mIdx + "선수 : " + rank + "등");
return rank;
}
return -1;
}
public void getBoard() { //전적 출력
System.out.print(mIdx+"선수 winList : [");
for(int i=0; i<winList.size(); i++) {
System.out.print(winList.get(i) + " ");
}
System.out.print("] loseList : [");
for(int i=0; i<loseList.size(); i++) {
System.out.print(loseList.get(i) + " ");
}
System.out.println("]");
}
}
public static int solution(int n, int[][] results) {
int answer = 0;
Player[] playerList = new Player[n];
for(int i=0; i<playerList.length; i++) {
playerList[i] = new Player(i,n-1);
}
//초기결과 셋팅
for(int i=0; i<results.length; i++) {
playerList[results[i][0]-1].win(results[i][1]-1);
playerList[results[i][1]-1].lose(results[i][0]-1);
}
//가지고있는 결과들을 기준으로 상하관계[함축되어있는 경기결과를 유추]
for(int i=0; i<playerList.length; i++) {
int wTemp = -1; //이긴놈 idx
int lTemp = -1; //진놈 idx
for(int j=0; j<playerList[i].winList.size(); j++) {
lTemp = playerList[i].winList.get(j);
for(int k=0; k<playerList[i].loseList.size(); k++) {
wTemp = playerList[i].loseList.get(k);
playerList[wTemp].win(lTemp);
playerList[lTemp].lose(wTemp);
}
}
}
//확정된 순위 산출
for(int i=0; i<playerList.length; i++) {
System.out.println(playerList[i].mIdx + "선수 " + playerList[i].played + "판함");
playerList[i].getBoard();
if(playerList[i].getRank() != -1) answer++;
}
return answer;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
// int n = 8;
// int[][] results = {{1, 2}, {2, 3}, {3, 4}, {5, 6}, {6, 7}, {7, 8}};
int n = 5;
int[][] results = {{1, 4}, {4, 2}, {2, 5}, {5, 3}};
System.out.println(solution(n, results));
}
}
|
cs |