본문 바로가기

CS/알고리즘

[230322] 등수 매기기: indexOf

반응형

 

 

등수 매기기

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


 

내 풀이

  1. 두 과목의 합을 구함 =sumScore
  2. 그것을 정렬함 =sortedScore
  3. 등수를 넣을 배열을 생성함 =answer. 배열에는 Null이 들어가 있다.
  4. rank = 1을 두고,
  5. sortedScore의 마지막 인덱스가 가장 높은 점수이므로 이것을 max에 저장한다.
  6. sumScore를 순회하고 그 값이 max와 동일하면,
    1. answer 의 해당 인덱스에 rank를 넣음.
    2. 그리고 sumScore의 해당 인덱스에는 -1 값을 넣어서 해당 인덱스는 등수를 매겼음을 표시하여 값을 없앤다.
    3. → 이것을 순회하는 이유는, 같은 점수를 얻은 경우는 같은 등수를 가져야하기 때문.
  7. 등수를 넣었으면 sortedScore의 마지막 인덱스, 즉 가장 높은 점수는 Pop하여 없애고,
  8. 등수 rank는 +1한다.
  9. 이 과정을 sortedScore 배열에 값이 모두 없어질 때까지 반복한다.
  10. 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;
}

 

 

 

다른 풀이

  1. 두 점수를 모두 더한 배열 = totalScore
  2. 그걸 내림차순으로 정렬한 배열 = sortedScore (가장 높은 숫자의 인덱스가 0)
  3. totalScore을 읽고, sortedScore에서 그 값의 인덱스는 등수 - 1 ! (sortedScore의 인덱스는 0부터 시작하기 때문)
  4. 그래서 인덱스 + 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