๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜

[Java] BOJ 18870 ์ขŒํ‘œ ์••์ถ•

by ๐ŸŠ๊ทค๐ŸŠ 2024. 8. 15.

๋ฌธ์ œ 

๋ฌธ์ œ ๋งํฌ https://www.acmicpc.net/problem/18870

  • ์ˆ˜์ง์„  ์œ„์— N๊ฐœ์˜ ์ขŒํ‘œ X1, X2, ..., XN์ด ์žˆ๋‹ค. ์ด ์ขŒํ‘œ์— ์ขŒํ‘œ ์••์ถ•์„ ์ ์šฉํ•˜๋ ค๊ณ  ํ•œ๋‹ค.
  • X1, X2, ..., XN์— ์ขŒํ‘œ ์••์ถ•์„ ์ ์šฉํ•œ ๊ฒฐ๊ณผ X'1, X'2, ..., X'N๋ฅผ ์ถœ๋ ฅํ•ด๋ณด์ž.
  • Xi๋ฅผ ์ขŒํ‘œ ์••์ถ•ํ•œ ๊ฒฐ๊ณผ X'i์˜ ๊ฐ’์€ Xi > Xj๋ฅผ ๋งŒ์กฑํ•˜๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์ขŒํ‘œ Xj์˜ ๊ฐœ์ˆ˜์™€ ๊ฐ™์•„์•ผ ํ•œ๋‹ค.
  • ์ฒซ์งธ ์ค„์— N์ด ์ฃผ์–ด์ง„๋‹ค.
  • ๋‘˜์งธ ์ค„์—๋Š” ๊ณต๋ฐฑ ํ•œ ์นธ์œผ๋กœ ๊ตฌ๋ถ„๋œ X1, X2, ..., XN์ด ์ฃผ์–ด์ง„๋‹ค.
  • ์ฒซ์งธ ์ค„์— X'1, X'2, ..., X'N์„ ๊ณต๋ฐฑ ํ•œ ์นธ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์ถœ๋ ฅํ•œ๋‹ค.

์•„์ด๋””์–ด

  • ์ขŒํ‘œ๊ฐ’์„ ์ €์žฅํ•  ๋•Œ ๋ฐฐ์—ด์— ํ•œ๋ฒˆ ์ €์žฅํ•˜๊ณ  TreeSet์— ํ•œ๋ฒˆ ๋” ์ €์žฅํ•œ๋‹ค.
  • TreeSet์— ์ €์žฅํ•˜๋Š” ์ด์œ ๋Š” ์ค‘๋ณต๊ฐ’์„ ์ œ๊ฑฐํ•˜๊ณ  ์ •๋ ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  HashMap์— TreeSet์— ์ €์žฅํ•œ ๊ฐ’์„ Key๋กœ, ์ˆœ์„œ๋ฅผ ์ €์žฅํ•  ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ  1์”ฉ ์นด์šดํŠธํ•˜์—ฌ Value๊ฐ’์œผ๋กœ ์ €์žฅํ•œ๋‹ค. (์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ˆœ์„œ๋Œ€๋กœ ์นด์šดํŠธํ•œ ๊ฐ’์ด ์ˆœ์„œ๊ฐ€ ๋œ๋‹ค.)
  • ๊ทธ๋ฆฌ๊ณ  ์ฒ˜์Œ์— ์ €์žฅํ•œ ๋ฐฐ์—ด๊ฐ’์œผ๋กœ HashMap์—์„œ ๊ฒ€์ƒ‰ํ•˜์—ฌ ์ˆœ์„œ๋ฅผ ๊ฒฐ๊ณผ๊ฐ’ ๋ฐฐ์—ด์— ์ €์žฅํ•œ๋‹ค.

๊ฒช์€ ์‹œํ–‰์ฐฉ์˜ค

  • X

์ข€ ๋” ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์„ ๊ฒƒ ๊ฐ™์€๋ฐ ๋‚˜์ค‘์— ๊ณต๋ถ€ํ•ด๋ด์•ผ๊ฒ ๋‹ค...!

์ฝ”๋“œ

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

public class BOJ18870 {
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        // ์ขŒํ‘œ ๊ฐœ์ˆ˜
        int N = Integer.parseInt(br.readLine());

        // ์ขŒํ‘œ๊ฐ’์„ ๋„ฃ์„ ๋ฐฐ์—ด
        int arr[] = new int[N];

        // ์ขŒํ‘œ๊ฐ’์„ ์ •๋ ฌํ•  treeset(์ค‘๋ณต๊ฐ’์„ ์ œ์™ธํ•˜๊ธฐ ์œ„ํ•ด)
        TreeSet<Integer> arr2 = new TreeSet<>();

        // ์ขŒํ‘œ๊ฐ’๊ณผ ์••์ถ• ์ขŒํ‘œ๊ฐ’์„ ์ €์žฅํ•  Hashmap
        HashMap<Integer, Integer> graph = new HashMap<>();

        // ๊ฒฐ๊ณผ๊ฐ’์„ ์ €์žฅํ•  ๋ฐฐ์—ด
        int result[] = new int[N];

        StringTokenizer st = new StringTokenizer(br.readLine());

        // ๋ฐฐ์—ด์— ์ขŒํ‘œ๊ฐ’์„ ์ €์žฅ
        for(int i = 0; i < N; i++){
            int x = Integer.parseInt(st.nextToken());

            arr[i] = x;
            arr2.add(x);
        }

        // ์ˆœ์„œ
        int cnt = 0;

        // ์ •๋ ฌํ•œ treeset์˜ ๊ฐ’์„ key๋กœ, ์ˆœ์„œ๋ฅผ value๋กœ hashmap์— ์ €์žฅ
        for(int i : arr2){
            graph.put(i, cnt);

            // ์ˆœ์„œ + 1
            cnt = cnt + 1;
        }

        for(int i = 0; i < arr.length; i++){
            // ๊ฒฐ๊ณผ๊ฐ’์— ๋ฐฐ์—ด์˜ ๊ฐ’์„ ์ด์šฉํ•˜์—ฌ hashmap์— ์ €์žฅ๋˜์–ด์žˆ๋Š” value๊ฐ’์„ ์ €์žฅ
            result[i] = graph.get(arr[i]);
        }

        for(int i = 0; i < result.length; i++){
            sb.append(result[i] + " ");
        }

        System.out.println(sb);
    }
}