입출력 예
score | result |
[[80, 70], [90, 50], [40, 70], [50, 80]] | [1, 2, 4, 3] |
[[80, 70], [70, 80], [30, 50], [90, 100], [100, 90], [100, 100], [10, 30]] | [4, 4, 6, 2, 2, 1, 7] |
입출력 예 설명
입출력 예 #1
- 평균은 각각 75, 70, 55, 65 이므로 등수를 매겨 [1, 2, 4, 3]을 return합니다.
입출력 예 #2
- 평균은 각각 75, 75, 40, 95, 95, 100, 20 이므로 [4, 4, 6, 2, 2, 1, 7] 을 return합니다.
- 공동 2등이 두 명, 공동 4등이 2명 이므로 3등과 5등은 없습니다.
- 내 풀이
class Solution {
public int[] solution(int[][] score) {
int[] answer = new int[score.length];
int count = 0;
int[] average = new int[score.length];
for (int i = 0; i < score.length; i++) {
average[i] = (score[i][0] + score[i][1]) / 2;
}
for (int i = 0; i < average.length; i++) {
count = 1;
for (int j = 0; j < average.length; j++) {
answer[i] = 1;
if(average[i] < average[j]){
count++;
}
}
answer[i] = count;
}
return answer;
}
}
위의 예제는 소수점 자리를 고려하지 않아 올바른 등수를 표시 할 수 없었다(12개 테스트 중 10개 성공)
예) {1 , 3} {1, 1} .... 중에 두 배열의 값의 평균을 구하면 1.5 와 1 이지만 두 값을 비교하지 않고 그냥 배열에 넣게 되면
소숫점 자리는 들어가지 않게 되어 두 배열에 1 과 1이 들어간다
그래서 등수를 매길 때 같은 평균으로 인식하여 등수가 계속 뒤로 밀리는 현상이 생겼다.
결론은 그냥 평균을 구해서 배열에 넣는게 아니라 앞의 평균과 뒤의 평균의 크기를 비교해야 한다는 점이다
- 내 풀이(성공)
class Solution {
public int[] solution(int[][] score) {
// int[][] score = {{80, 70}, {90, 50}, {40, 70}, {50, 80}};
// int[][] score = {{80, 70}, {70, 80}, {30, 50}, {90, 100}, {100, 90}, {100, 100}, {10, 30}};
// int[][] score = {{1, 2}, {1, 1}, {1, 1}};
// int[][] score = {{1,1}, {2,1}, {3,1}, {4,1}, {5,1}, {6,1}, {7,1}, {8,1}, {9,1}, {0,0}};
// 답 [9,8,7,6,5,4,3,2,1,10]
// int[][] score = {{0, 20}, {80, 100}, {10, 10}, {90, 90}, {20, 0}};
//-> [3, 1, 3, 1, 3]
// 매개변수의 크기로 초기화
int[] answer = new int[score.length];
int count = 0;
// 첫 배열의 평균을 순서대로 비교해야 하기 때문에 이중for문을 사용한다.
for (int i = 0; i < score.length; i++) {
// 처음엔 모두 1등부터 시작해서 자신보다 큰 점수가 있으면 + 한다.
count = 1;
// 첫 배열의 평균을 i 로 잡고 순차적으로 비교할 값을 j로 한다
for (int j = 0; j < score.length; j++) {
// 자신의 평균보다 큰 수가 없을 수도 있기 때문에 answer[i]에 1을 넣어 놓았다
answer[i] = 1;
// 첫 배열의 합한 값과 다음 배열의 합한 값의 크기를 비교한다
if((score[i][0] + score[i][1]) < (score[j][0] + score[j][1])){
// 자신보다 큰 점수가 있기 때문에 등수를 뒤로 밀어주어야 한다.
count++;
}
}
answer[i] = count;
}
return answer;
}
}
- 다른 사람 풀이
import java.util.*;
class Solution {
public int[] solution(int[][] score) {
List<Integer> scoreList = new ArrayList<>();
for(int[] t : score){
scoreList.add(t[0] + t[1]);
}
scoreList.sort(Comparator.reverseOrder());
int[] answer = new int[score.length];
for(int i=0; i<score.length; i++){
answer[i] = scoreList.indexOf(score[i][0] + score[i][1])+1;
}
return answer;
}
}
'프로그래머스 > [프로그래머스 - JAVA] Lv.0' 카테고리의 다른 글
[프로그래머스 - JAVA] 특이한 정렬 (0) | 2023.03.17 |
---|---|
[프로그래머스 - JAVA] 유한소수 판별하기 (0) | 2023.03.16 |
[프로그래머스 - JAVA] 치킨 쿠폰 (0) | 2023.03.16 |
[프로그래머스 - JAVA] 로그인 성공? (0) | 2023.03.16 |
[프로그래머스 - JAVA] 직사각형 넓이 구하기 (0) | 2023.03.15 |
댓글