๊ธฐ๋ก๋ฐฉ

BOJ_18870 : ์ขŒํ‘œ ์••์ถ• ๋ณธ๋ฌธ

CodingTest/Java

BOJ_18870 : ์ขŒํ‘œ ์••์ถ•

Soom_1n 2023. 1. 23. 02:09

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

18870๋ฒˆ: ์ขŒํ‘œ ์••์ถ•

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

www.acmicpc.net



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • ์ž…๋ ฅ๋ฐ›์€ n๊ฐœ์˜ ์ˆ˜์—์„œ ์ „์ฒด ์ž…๋ ฅ ์ค‘์— ๋” ์ž‘์€ ๊ฐ’์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
    • 2์ฐจ์› ๋ฐฐ์—ด arr[n][3]์„ ์„ ์–ธํ•œ๋‹ค.
      • 1๋ฒˆ์งธ๋Š” ์ž…๋ ฅ ๊ฐ’, 2๋ฒˆ์งธ๋Š” ์ž…๋ ฅ ์ˆœ์„œ, 3๋ฒˆ์งธ๋Š” ์••์ถ• ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.
    • 1๋ฒˆ์งธ ๊ฐ’ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•œ๋‹ค.
    • 3๋ฒˆ์งธ ๊ฐ’์„ ์ฑ„์šด๋‹ค
      • ๋ฐฐ์—ด ์•ž์—์„œ ๋ถ€ํ„ฐ ๋” ์ž‘์€ ๊ฐ’์€ 0, 1, 2...๋กœ ์ปค์ ธ๊ฐ„๋‹ค.
      • ๊ฐ™์€ ๊ฐ’์ด ์—ฐ์†๋˜์„œ ๋‚˜์˜ค๋ฉด ๊ฐ’์„ ํ‚ค์šฐ์ง€ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ ์ €์žฅํ•œ๋‹ค.
    • 2๋ฒˆ์งธ ๊ฐ’ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•ด ์ฒ˜์Œ ์ž…๋ ฅ ์ˆœ์„œ๋กœ ๋˜๋Œ๋ฆฐ๋‹ค.
    • 3๋ฒˆ์งธ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;

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());
        Integer[][] arr = new Integer[n][3];
        StringTokenizer st = new StringTokenizer(br.readLine());

        // 1
        for (int i = 0; i < n; i++) {
            arr[i][0] = Integer.parseInt(st.nextToken());
            arr[i][1] = i;
        }

        // 2
//        Arrays.sort(arr, (o1, o2) -> o1[0] - o1[0]); // ๋žŒ๋‹ค์‹ ํ‘œํ˜„
        Arrays.sort(arr, new Comparator<Integer[]>() {
            @Override
            public int compare(Integer[] o1, Integer[] o2) {
                return Integer.compare(o1[0], o2[0]);
            }
        });

        // 3
        int count = 0;
        arr[0][2] = count;
        for (int i = 1; i < n; i++) {
            if (!(arr[i][0].equals(arr[i-1][0])))
                count++;
            arr[i][2] = count;
        }

        // 4
        Arrays.sort(arr, new Comparator<Integer[]>() {
            @Override
            public int compare(Integer[] o1, Integer[] o2) {
                return Integer.compare(o1[1], o2[1]);
            }
        });

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < n; i++) {
            sb.append(arr[i][2] + " ");
        }
        System.out.println(sb);
    }
}

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • 1) n๊ฐœ์˜ ์ˆ˜์™€ ๊ทธ ์ˆœ์„œ๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค.
  • 2) ์ž…๋ ฅ ๋ฐ›์€ ์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•œ๋‹ค.
  • 3) ๋ถ™์–ด์žˆ๋Š” ๊ฐ’์ด ๊ฐ™์œผ๋ฉด ๊ทธ๋Œ€๋กœ, ๋‹ค๋ฅด๋ฉด count + 1 ๊ฐ’์„ ๋„ฃ์–ด ๋ฌธ์ œ์˜ ์••์ถ•์„ ์ €์žฅํ•œ๋‹ค.
  • 4) ์ˆœ์„œ ๊ฐ’์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•ด์„œ ์ฒ˜์Œ ์ž…๋ ฅ๋ฐ›์€ ์ˆœ์„œ๋กœ ๋˜๋Œ๋ฆฐ๋‹ค.
  • ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • 2์ฐจ์› ๋ฐฐ์—ด์˜ ์† ์›์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ 3๊ฐœ๋กœ ์ง€์ •ํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ–ˆ๋‹ค.
    • ์ €๋ฒˆ์—๋„ ๋ณด๊ณ  2๋ฒˆ์งธ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ธ๋ฐ, ์ž˜ ์ƒ๊ฐํ•ด๋‚ธ ๊ฒƒ ๊ฐ™๋‹ค.
  • ํŠน์ • ๊ฐ’์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ์˜ค๋ฒ„๋ผ์ด๋“œ ๋ฉ”์„œ๋“œ compare์—์„œ Integer๋ฅผ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, ์›๋ž˜๋Š” o1-o2๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜๋‹ค. '-' ์—ฐ์‚ฐ์ž๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ธ๋ฐ, Integer.compare()๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. (๊ฐ™์€ ๊ฒฐ๊ณผ)
    • 2๋ฒˆ์งธ ๊ฐ’์„ ๋„ฃ๋Š” for๋ฌธ์—์„œ๋„ if๋ฌธ์—์„œ '!='์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ Integer ๋ผ๋ฆฌ์˜ ์—ฐ์‚ฐ์€ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜๋‹ค. .equals()๋กœ ๋ณ€๊ฒฝํ–ˆ๋‹ค.
  • ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜์„œ ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅํ˜•์‹์„ ๋น ๋ฅด๊ฒŒ ๋ฐ”๊ฟจ๋”๋‹ˆ ํ†ต๊ณผ๋˜์—ˆ๋‹ค.
  • LCD ํŒจ๋“œ์— ๋ฌธ์ œ๋ถ„์„๊ณผ ์ฝ”๋”ฉ๊ณ„ํš์„ ์งœ๋Š” ๋ฐฉ๋ฒ•์„ ์‹œ๋„ํ•ด ๋ณด์•˜๋Š”๋ฐ, ์ข‹์€ ์ ์ด ๋งŽ์€ ๊ฒƒ ๊ฐ™์•„ ๋” ์—ฐ์Šตํ•  ์ƒ๊ฐ์ด๋‹ค.
    • ๋ฌธ์ œ ๋ถ„์„์ด ๋” ํ™•์‹คํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ๊ณ„์† ๋‹ค์‹œ์ฝ์ง€ ์•Š๊ณ  ๊ณ„ํš๋Œ€๋กœ ์ญ‰ ์ฝ”๋”ฉํ–ˆ๋‹ค.
    • ์ค‘๊ฐ„์— ๊ณ„ํš์„ ์ˆ˜์ • ํ•  ๋•Œ์—๋„ ํ—ท๊น”๋ฆฌ์ง€ ์•Š์•˜๋‹ค. (int๋ฅผ Integer๋กœ ๋ณ€๊ฒฝ ๋“ฑ...)

728x90