다희의 코딩 성장일기
[프로그래머스] level1. 위클리 챌린지 6주차_복서 정렬하기 (자바 JAVA) 본문
[ 문제 ] [프로그래머스] level1. 위클리 챌린지 6주차_복서 정렬하기 (자바 JAVA)
문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/85002?language=java
# 접근 방법 및 풀이
- 문제 제목에 적힌대로 정렬문제다.
- boxer라는 클래스를 만들어 정렬에 필요한 변수들을 선언해주었다.
- num = 번호, cnt = 자신보다 몸무게가 무거운 복서를 이긴 횟수, weight = 몸무게, rate = 승률
- 처음에 승률 계산할때 붙어본적 없는 선수와의 대결도 총 대결수로 쳐야하나? 헷갈렸는데 그럴 필요없다.
- 승률 = (이긴횟수) / (총 대결 수 ) * 100 을 해주면 된다.
- 정렬은 Comparable을 이용해서 정렬해주었고, 오름차순일 경우 내림차순일 경우를 잘 숙지하고 있다면 쉽게 구현할 수 있다.
- 문제 정렬 조건에 1,2,3은 숫자가 큰 내림차순이고 4만 작은번호가 앞쪽으로 가기 때문에 오름차순으로 정렬해주면 된다.
- 근데 문제 풀었더니 5번이 틀렸다..? 역시 rate구할때 0 / 0 일 경우 오류나기 때문에 실패뜬다.
- double형태의 0/0 하면 NaN 숫자가 아닌 필드값 이 뜨니 조심하자.
# 주의할 점
- 승률 구할 경우 0 / 0 <- 이 경우 오류남. 테케 5번이 틀리면 이부분 수정할 것!
JAVA 코드
import java.util.*;
class Solution {
static class boxer implements Comparable<boxer> {
int num, cnt, weight;
double rate;
public boxer(int num, double rate, int cnt, int weight) {
this.num = num;
this.rate = rate;
this.cnt = cnt;
this.weight = weight;
}
@Override
public int compareTo(boxer o) {
if (Double.compare(o.rate, this.rate) == 0) {
if (o.cnt == this.cnt) {
if (o.weight == this.weight)
return this.weight - o.weight;
return o.weight - this.weight;
}
return o.cnt - this.cnt;
}
return Double.compare(o.rate, this.rate);
}
}
public int[] solution(int[] weights, String[] head2head) {
int[] answer = new int[weights.length];
List<boxer> list = new ArrayList<>();
for (int i = 0; i < weights.length; i++) {
String arr[] = head2head[i].split("");
double sum = 0;
double win = 0;
int cnt = 0;
for (int j = 0; j < arr.length; j++) {
if (arr[j].equals("W")) {
if (weights[j] > weights[i])
cnt++;
win++;
}
if (arr[j].equals("N"))
continue;
sum++;
}
double rate = ((sum==0)&&(win==0))? 0 : (win / sum) * 100; // 0/0했을경우
list.add(new boxer(i, rate, cnt, weights[i]));
}
Collections.sort(list);
for (int i = 0; i < list.size(); i++) {
answer[i] = list.get(i).num + 1;
}
return answer;
}
}
REVIEW
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] level1. 없는 숫자 더하기 (자바 JAVA) (0) | 2021.09.21 |
---|---|
[프로그래머스] level2. 예상 대진표 (자바 JAVA) (0) | 2021.09.02 |
[프로그래머스] level2. 더 맵게 (자바 JAVA) (0) | 2021.09.02 |
[프로그래머스] level2. 주식가격 (자바 JAVA) (0) | 2021.09.02 |
[프로그래머스] level2. 쿼드압축 후 개수 세기 (자바 JAVA) (0) | 2021.09.01 |
Comments