기록하는 공부
[Programmers] 120882 등수 매기기 (Wrapper / Arrays.sort() / Collections.reverseOrder() / 내림차순 정렬) 본문
[Programmers] 120882 등수 매기기 (Wrapper / Arrays.sort() / Collections.reverseOrder() / 내림차순 정렬)
SS_StudySteadily 2023. 7. 28. 17:02
문제 출처
https://school.programmers.co.kr/learn/courses/30/lessons/120882
나의 풀이
import java.util.*;
class Solution {
public int[] solution(int[][] score) {
int[] answer = new int[score.length];
double[] avgArr = new double[score.length];
for(int i=0; i<score.length; i++) { //평균계산 후 avgArr에 저장
avgArr[i] = (double)(score[i][0] + score[i][1])/2.0;
}
//sortArr을 avgArr 복사 후 Double형으로 박싱
Double[] sortArr = Arrays.stream(avgArr).boxed().toArray(Double[]::new);
Arrays.sort(sortArr, Collections.reverseOrder()); //sortArr 내림차순 정렬
for(int i=0; i<avgArr.length; i++) { //avgArr값과 sortArr값이 같으면
for(int j=0; j<sortArr.length; j++) {
if(avgArr[i] == sortArr[j]) {
answer[i] = j+1; //sortArr 인덱스 값을 answer에 입력
break;
}
}
}
return answer;
}
}
처음에 실행했을 때, 테스트 1은 통과하지만 테스트 2는 계속 통과하지 못했다.
원인은 공동 2등이 2명, 공동 4등이 2명일 때 3등과 5등은 없어야 하는데 이 부분이 계산되지 않았기 때문이었다.
그래서 if문 하단에 break문을 넣자 성공적으로 통과할 수 있었다.
그리고 채점을 진행했는데 이번에는 테스트 3, 6번에서 실패했다.
평균을 계산할 때 정수형이 아닌 실수형으로 계산해야 하는 것 같다.
그래서 avgArr의 자료형을 double 형으로 바꾸고 박싱을 진행할 때
Double 형으로 바꿔서 코드를 수정했더니 성공할 수 있었다.
내림차순 정렬
오름차순은 Arrays.sort(배열명) 메서드를 활용하여 정렬할 수 있다.
하지만, 내림차순의 경우, Arrays.sort(배열명, Collections.reverseOrder())을 사용해야 한다.
이때, 주의할 점은 기본 자료형 배열인 경우에는 Collections.reverseOrder()을 사용할 수가 없다.
기본 자료형 배열에는 byte, short, int, long, char, float, double, boolean이 있다.
따라서 이런 경우에는 기본 자료형 배열을 Wrapper(래퍼) 클래스로 만든 후에 boxing을 해야 한다.
Wrapper(래퍼) 클래스란 기본 자료형의 데이터를 인스턴스(객체)로 만들기 위해 사용하는 클래스이다.
아래 기본형과 매칭이 되는 Wrapper 클래스 이미지를 참고해서 보자.
그래서 double형으로 정의한 avgArr를 내림차순 정렬해 sortArr에 저장하기 위해서
Wrapper 클래스 Double을 사용했고 박싱을 진행했다.
//sortArr을 avgArr 복사 후 Double형으로 박싱
Double[] sortArr = Arrays.stream(avgArr).boxed().toArray(Double[]::new);
'Language > Java' 카테고리의 다른 글
[Programmers] 120843 공 던지기 (0) | 2023.08.02 |
---|---|
[Java] BigInteger를 알아보자 ! (0) | 2023.07.20 |
[Programmers] 120840 구슬을 나누는 경우의 수 (BigInteger 사용 / 간단 코드 작성 / 덧셈과 나눗셈을 동시에 / for문 변수 2개 / 재귀 함수 사용 / 팩토리얼 / 콤비네이션 계산) (0) | 2023.07.20 |