백준 18870

Jb·2024년 3월 15일

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        int[] original = new int[N];
        Integer[] sorted = new Integer[N];
        HashMap<Integer, Integer> ranking = new HashMap<>();

        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        for (int i = 0; i < N; i++) {
            original[i] = Integer.parseInt(st.nextToken());
            sorted[i] = original[i];
        }

        Arrays.sort(sorted);

        int rank = 0;
        for (int i = 0; i < N; i++) {
            if (!ranking.containsKey(sorted[i])) { //key값에 정렬된 입력값이 있으면
                ranking.put(sorted[i], rank++);  //정렬된 값을 꺼내고 랭크를 증가
            }
        }

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < N; i++) {
            sb.append(ranking.get(original[i])).append(' ');
        }
        System.out.println(sb);
    }
}

생각의 흐름

1.등수물어보는 문제로구나!
2.두개의 배열을 선언하고 사용자에게 값을 입력받아 복사한다.
3.해시맵을 활용해서 키값에 등수를 넣고 있으면 count값을 증가시킨다.
4.해시맵을 통해 등수,값 이렇게 저장
5.StringBuilder를 통해 등수를 출력

느낀점

StringBuilder와 배열의 복사 개념,해시맵을 조금 더 능숙하게 활용할 수 있도록 연습!

0개의 댓글