반응형
등수 매기기
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
내 풀이
- 두 과목의 합을 구함 =sumScore
- 그것을 정렬함 =sortedScore
- 등수를 넣을 배열을 생성함 =answer. 배열에는 Null이 들어가 있다.
- rank = 1을 두고,
- sortedScore의 마지막 인덱스가 가장 높은 점수이므로 이것을 max에 저장한다.
- sumScore를 순회하고 그 값이 max와 동일하면,
- answer 의 해당 인덱스에 rank를 넣음.
- 그리고 sumScore의 해당 인덱스에는 -1 값을 넣어서 해당 인덱스는 등수를 매겼음을 표시하여 값을 없앤다.
- → 이것을 순회하는 이유는, 같은 점수를 얻은 경우는 같은 등수를 가져야하기 때문.
- 등수를 넣었으면 sortedScore의 마지막 인덱스, 즉 가장 높은 점수는 Pop하여 없애고,
- 등수 rank는 +1한다.
- 이 과정을 sortedScore 배열에 값이 모두 없어질 때까지 반복한다.
- answer를 리턴한다.
function solution(score) {
const sumScore = score.map((s => s[0] + s[1]));
const sortedScore = [...sumScore].sort((x, y) => x - y);
const answer = new Array(score.length).fill(null);
let rank = 1;
while(sortedScore.length !== 0) {
const max = sortedScore[sortedScore.length - 1];
sumScore.forEach((s,idx) => {
if(s === max) {
answer[idx] = rank;
sumScore[idx] = -1;
}
});
sortedScore.pop();
rank++;
}
return answer;
}
다른 풀이
- 두 점수를 모두 더한 배열 = totalScore
- 그걸 내림차순으로 정렬한 배열 = sortedScore (가장 높은 숫자의 인덱스가 0)
- totalScore을 읽고, sortedScore에서 그 값의 인덱스는 등수 - 1 ! (sortedScore의 인덱스는 0부터 시작하기 때문)
- 그래서 인덱스 + 1 한 값이 해당 score 점수이므로 return sortedScore.indexOf(s) + 1 !
function solution(score) {
const totalScore = score.map(s => s[0] + s[1]);
const sortedScore = [...totalScore].sort((a, b) => b - a);
return totalScore.map(s => sortedScore.indexOf(s) + 1)
}
반응형
'CS > 알고리즘' 카테고리의 다른 글
[230323] 둘만의 암호 (0) | 2023.03.26 |
---|---|
[230323] 최빈값 구하기 (0) | 2023.03.26 |
[230323] 유한소수 판별하기: toFixed (0) | 2023.03.26 |
[230321] 특이한 정렬 (0) | 2023.03.26 |
[230321] 최대공약수(GCD), 최소공배수(LCM) (0) | 2023.03.21 |