반응형
문제분석:
복서간의 경기기록이 주어지고, 경기기록에의해 나오는 정보(몸무게, 승률,자신보다 몸무게가큰 선수와의 승리,번호)
를 이용하여 지정정렬하는 문제입니다.
이게왜 Leve1이지???;
문제풀이
지정정렬하기 위해선 각 복서마다 정보가 4개 (번호,승률,자신보다 몸무게가큰 선수와 승리수,몸무게)가
필요하다.
이걸 효율적으로 사용하기위해, 새로 Boxer클래스를 생성하고 4개의변수를 생성했다.
변수를 초기화하고, 생성자를 생성해 생성자주입으로 코딩하였다.
10~40줄까지 복서를 순회(1차반복)하면서, 4개의 정보를 저장하기위한 변수를 초기화한다.
복서의 승리기록(2차반복)을 순회하면서 승률과 자신보다 무거운복서를 승리한횟수를 저장한다.
반복이 모두끝나고 4개의 정보를구했다면, list에 Boxer를 저장한다.
40~66줄부터는 list에 저장된 Boxer들을 지정정렬한다.
다른사람의 풀이를보니 이 지정정렬을 엄청 깔끔하게 하신분이 계신다.
필자같은경우는 그냥 모든 경우를 손코딩한건데, 조건문과 리턴을 잘 넣으면 훨씬 줄일수있다.
지정정렬까지 모두완료했다면, List의 Boxer의 번호를 배열에넣어서 반환하면된다.
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
|
import java.util.*;
class Solution {
public int[] solution(int[] weights, String[] head2head) {
double boxer = head2head.length;
List<Boxer> list = new ArrayList<>();
for(int i=0; i<boxer;i++){
int boxerNum=i+1;
double win_rate=0;
int over_cnt=0;
int weight=weights[i];
int cnt=0;
int index=0;
int not_play=0;
//승률,무거운복서 이긴횟수
for(String s:head2head[i].split("")){
if(s.equals("W")){
cnt++;
if(weights[i]<weights[index]){
over_cnt++;
}
}
else if(s.equals("N")){
not_play++;
}
index++;
if(boxer==not_play){
win_rate=0;
break;
}
win_rate=cnt/(boxer-not_play);
}
list.add(new Boxer(boxerNum,win_rate,over_cnt,weight));
}
Collections.sort(list,new Comparator<Boxer>(){
public int compare(Boxer s1,Boxer s2){
if(s1.win_rate>s2.win_rate){
return -1;
}
else if(s1.win_rate==s2.win_rate){
if(s1.cnt>s2.cnt){
return -1;
}
else if(s1.cnt==s2.cnt){
if(s1.weight>s2.weight){
return -1;
}
else if(s1.weight==s2.weight){
if(s1.boxerNum>s2.boxerNum){
return 1;
}
else{return -1;}
}
else{return 1;}
}
else{return 1;}
}
else{return 1;}
}
});
int[] answer = new int[head2head.length];
for(int i=0;i<list.size();i++){
answer[i]=list.get(i).boxerNum;
}
return answer;
}
}
class Boxer {
int boxerNum;
double win_rate;
int cnt;
int weight;
public Boxer(int boxerNum,double win_rate, int cnt,int weight){
this.boxerNum = boxerNum;
this.win_rate = win_rate;
this.cnt = cnt;
this.weight = weight;
}
}
|
cs |
반응형
'알고리즘 > 프로그래머스 Level1' 카테고리의 다른 글
[프로그래머스,Java] Level1: 소수 찾기 (0) | 2021.09.21 |
---|---|
[프로그래머스,Java] Level1:없는 숫자 더하기 (0) | 2021.09.17 |
[프로그래머스,자바] Level1: 위클리챌린지 4주차 [직업군 추천하기] (0) | 2021.09.01 |
[프로그래머스,자바] Level1: 서울에서 김서방 찾기 (0) | 2021.08.19 |
[프로그래머스,자바] Level1:문자열 다루기 기본 (0) | 2021.08.19 |