Leetcode Java Relative Ranks
업데이트:
문제
코드
class Solution {
public String[] findRelativeRanks(int[] score) {
int length = score.length;
int max = 0;
for (int s : score) {
if (s > max) {
max = s;
}
}
int[] map = new int[max + 1];
for (int idx = 0; idx < length; idx++) {
map[score[idx]] = idx + 1;
}
String[] result = new String[length];
int count = 0;
for (int idx = max; idx >= 0; idx--) {
if (map[idx] != 0) {
switch (++count) {
case 1: result[map[idx] - 1] = "Gold Medal"; break;
case 2: result[map[idx] - 1] = "Silver Medal"; break;
case 3: result[map[idx] - 1] = "Bronze Medal"; break;
default: result[map[idx] - 1] = String.valueOf(count);
}
}
}
return result;
}
}
결과
설명
-
점수를 담은 score를 이용하여 1위는 “Gold Medal”, 2위는 “Silver Medal”, 3위는 “Bronze Medal”, 그 외는 각자 등수를 담은 배열로 반환하는 문제이다.
- 문제 풀이에 필요한 변수를 정의한다.
- length는 score의 길이를 저장할 변수이다.
- max는 score 내 가장 큰 점수를 저장할 변수로, score를 반복하여 최댓값을 넣어준다.
- map은 각 점수 별 위치를 저장할 배열로, $max + 1$ 크기로 정의하고 score를 반복하여 해당 점수에 해당하는 위치에 $idx + 1$을 넣어준다.
- result는 결과를 넣어줄 배열로, length의 크기만한 문자열 배열로 정의한다.
- count는 등수를 계산할 변수로, 0으로 초기화한다.
- max부터 0까지 idx를 감소시키며 반복하여 아래를 수행한다.
- map의 idx번째 값이 0이 아닌 경우 score에 존재하는 값으로, 아래의 절차대로 result에 값을 넣어준다.
- count를 증가시킨 값이 1인 경우, result의 $map[idx] - 1$번째 위치에 “Gold Medal”을 넣어준다.
- count를 증가시킨 값이 2인 경우, result의 $map[idx] - 1$번째 위치에 “Silver Medal”을 넣어준다.
- count를 증가시킨 값이 3인 경우, result의 $map[idx] - 1$번째 위치에 “Bronze Medal”을 넣어준다.
- count를 증가시킨 값이 4 이상인 경우, result의 $map[idx] - 1$번째 위치에 count를 넣어준다.
- map의 idx번째 값이 0이 아닌 경우 score에 존재하는 값으로, 아래의 절차대로 result에 값을 넣어준다.
- 반복이 완료되면 결과를 넣은 result를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기