알고리즘/인프런_자바코테강의

인프런 8. 등수구하기(Java)

고구마와 감자 2022. 4. 21. 20:52

 

Solution

1. 일단 배열을 생성한다. 모든 값이 0이다. 

2. 2중 for문을 작성하고 바깥쪽 for문의 인덱스의 배열에 1을 할당한다. 

3. 안쪽 for문에서 i 번째 배열보다 큰 값이 나오면 등수의 숫자는 커지므로 i번째 배열의 값을 증가시킨다. 

 

 

아래 설명이 더 분명하다. 

 순위 알고리즘
*  주어진 범위 데이터의 순위를 구하는 알고리즘인데,
*
*  순위를 보관할 배열을 추가로 하나 만들어서 해당 배열에 값별 순위를 넣어줘야 한다.
*
*  이후 for문을 돌리면서 해당 값의 순위를 1로 시작하고
*  for문 안에서 for문을 한 번 더 돌리면서 배열의 i값과 다른 값(j)들을 비교하는데
*  배열의 i값보다 큰 값이 있으면 i값보다 큰 값이 있으면 i값에 해당하는 순위 배열의 i값을 1씩 올려준다.
public class Main {
    private int[] solution(int n, int[] arr) {
        int[] rankArr = new int[n];

        for (int i = 0; i < n; i++) {
            rankArr[i] = 1;
            for (int j = 0; j < arr.length; j++) {
                if (arr[i] < arr[j]) {
                    rankArr[i]++;
                }
            }
        }
        return rankArr;
    }

    public static void main(String[] args) {
        Main T = new Main();
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = sc.nextInt();
        }
        for (int i : T.solution(n, arr)) {
            System.out.print(i + " ");
        }
    }
}