https://school.programmers.co.kr/learn/courses/30/lessons/120882
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이 과정
- 평균값 배열을 만든다.
- 평균값 배열에서 최대값을 구한다.
- 평균값 배열에서 최대값인 요소의 인덱스를 저장하고 카운트를 증가한다.
- 3번에서 찾은 요소를 평균값 배열에서 제거한다.
- 리턴할 배열에서, 3번에서 찾은 '인덱스'위치에 '카운트'를 이용해 등수를 저장한다.
- 평균값 배열이 비어질 때까지 2~5를 반복한다.
코드
import java.util.*;
class Solution{
public int[] solution(int[][] score) {
int[] avg = new int[score.length];
for(int i=0; i<score.length; i++){
avg[i] = (int) Math.round((score[i][0] + score[i][1])/2.0);
}
ArrayList<Integer> avgList = new ArrayList();
for(int i=0; i<avg.length; i++){
avgList.add(avg[i]);
}
int[] answer = new int[avg.length];
int index = 1;
int count = 0;
while(avgList.size()!=0){
int max = 0;
ArrayList<Integer> tempList = new ArrayList();
for(int i=0; i<avgList.size(); i++){
if(avgList.get(i)>max)
max=avgList.get(i);
}
for(int i=0; i<avg.length; i++){
if(avg[i]==max){
count++;
tempList.add(i);
for(int j=0; j<avgList.size();j++){
if(max==avgList.get(j))
avgList.remove(j);
}
}
}
for(int a : tempList){
answer[a]=index;
}
if(count!=index){
index = index+(count-index);
}
index++;
}
return answer;
}
}
int형을 2로 나눈 값은 소수점을 버리기 때문에, 평균값의 정확한 비교가 되지 않아 테스트를 실패했었다.
평균값을 double로 계산해서 등수를 구하여 해결했다.
설계가 완벽하지 않아 구현하면서 약간은 스파게티 코드가 된 것 같다..
2시간 정도 소요되었다.
'알고리즘 > 문제' 카테고리의 다른 글
| [프로그래머스] 삼총사 / java (0) | 2022.11.06 |
|---|---|
| [프로그래머스] 다음에 올 숫자 / java (0) | 2022.11.05 |
| [프로그래머스] 치킨 쿠폰 / java (0) | 2022.11.02 |
| [프로그래머스] 직사각형 넓이 구하기 / java (0) | 2022.10.26 |
| [프로그래머스] 특이한 정렬 / java (0) | 2022.10.25 |