๊ธฐ๋ก๋ฐฉ

BOJ_1377 : ๋ฒ„๋ธ” ์†ŒํŠธ ๋ณธ๋ฌธ

CodingTest/Java

BOJ_1377 : ๋ฒ„๋ธ” ์†ŒํŠธ

Soom_1n 2022. 11. 8. 12:56

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

 

1377๋ฒˆ: ๋ฒ„๋ธ” ์†ŒํŠธ

์ฒซ์งธ ์ค„์— N์ด ์ฃผ์–ด์ง„๋‹ค. N์€ 500,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— A[1]๋ถ€ํ„ฐ A[N]๊นŒ์ง€ ํ•˜๋‚˜์”ฉ ์ฃผ์–ด์ง„๋‹ค. A์— ๋“ค์–ด์žˆ๋Š” ์ˆ˜๋Š” 1,000,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜ ๋˜๋Š” 0์ด๋‹ค.

www.acmicpc.net



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

  • ๋ฒ„๋ธ” ์ •๋ ฌ์˜ swap์ด ํ•œ ๋ฒˆ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š์€ ๋ฃจํ”„๊ฐ€ ์–ธ์ œ์ธ์ง€ ์•Œ์•„๋‚ด๋Š” ๋ฌธ์ œ์ด๋‹ค.
  • ๋ฒ„๋ธ” ์ •๋ ฌ์˜ ์ด์ค‘ for๋ฌธ์—์„œ ์•ˆ์ชฝ for๋ฌธ ์ „์ฒด๋ฅผ ๋Œ ๋•Œ swap์ด ์ผ์–ด๋‚˜์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒƒ์€ ์ด๋ฏธ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ๋๋‹ค๋Š” ์˜๋ฏธ์ด๊ณ , ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฐ”๋กœ ์ข…๋ฃŒํ•ด์„œ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
    • ํ•˜์ง€๋งŒ ์ด ๋ฌธ์ œ๋Š” N์˜ ์ตœ๋Œ€ ๋ฒ”์œ„๊ฐ€ 500,000์ด๋ฏ€๋กœ ๋ฒ„๋ธ” ์ •๋ ฌ๋กœ ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด ์‹œ๊ฐ„ ์ดˆ๊ณผ์ด๋‹ค.
    • ์•ˆ์ชฝ for๋ฌธ์ด ๋ช‡ ๋ฒˆ ์ˆ˜ํ–‰๋๋Š”์ง€ ๊ตฌํ•˜๋Š” ๋‹ค๋ฅธ ์•„์ด๋””์–ด๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
      • ์•ˆ์ชฝ ๋ฃจํ”„๋Š” 1์—์„œ n-i๊นŒ์ง€, ์ฆ‰ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™ํ•˜๋ฉด์„œ swap ์ˆ˜ํ–‰
      • ํŠน์ • ๋ฐ์ดํ„ฐ๊ฐ€ ์•ˆ์ชฝ ๋ฃจํ”„์—์„œ swap์˜ ์™ผ์ชฝ์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๊ฑฐ๋ฆฌ๊ฐ€ 1์ด๋ผ๋Š” ๋œป
      • ๋ฐ์ดํ„ฐ ์ •๋ ฌ ์ „ index์™€ ์ •๋ ฌ ํ›„ index๋ฅผ ๋น„๊ตํ•ด ์™ผ์ชฝ์œผ๋กœ ๊ฐ€์žฅ ๋งŽ์ด ์ด๋™ํ•œ ๊ฐ’์„ ์ฐพ์œผ๋ฉด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Œ (์ •๋ ฌ์˜ ๋งˆ์ง€๋ง‰ ๊นŒ์ง€ ์ด๋™ํ•œ ์ธ๋ฑ์Šค๊ฐ€ ๊ฐ€์žฅ ์ด๋™ ํšŸ์ˆ˜๊ฐ€ ๋งŽ์Œ)

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

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

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());
        mData[] arr = new mData[n];

        for (int i = 0; i < n; i++) arr[i] = new mData(Integer.parseInt(br.readLine()), i);

        Arrays.sort(arr);                   // arr๋ฐฐ์—ด ์ •๋ ฌ : O(nlogn)
        int max = 0;
        for (int i = 0; i < n; i++){
            if (max < arr[i].index - i)     // (์ •๋ ฌ ์ „ index - ์ •๋ ฌ ํ›„ index) ๊ณ„์‚ฐ์˜ ์ตœ๋Œ€๊ฐ’ ์ €์žฅ
                max = arr[i].index - i;
        }
        System.out.println(max + 1);
    }
}
class mData implements Comparable<mData> {
    int value;
    int index;

    public mData(int value, int index) {
        super();
        this.value = value;
        this.index = index;
    }

    @Override
    public int compareTo(mData o) {     // value ๊ธฐ์ค€ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•˜๊ธฐ
        return this.value - o.value;
    }
}

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

  • ์ž๋ฐ”์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” sort() ํ•จ์ˆ˜๋กœ ๋ฐฐ์—ด์„ ์ •๋ ฌ : O(nlogn)
  • ๊ฐ ๋ฐ์ดํ„ฐ ๋งˆ๋‹ค ์ •๋ ฌ ์ „ index ๊ฐ’์—์„œ ์ •๋ ฌํ›„ index ๊ฐ’์„ ๋นผ๊ณ  ์ตœ๋Œ€๊ฐ’์„ ์ฐพ๊ธฐ
    • ๊ทธ๋ฆฌ๊ณ  swap์ด ์ผ์–ด๋‚˜์ง€ ์•Š์€ ๋ฐ˜๋ณต๋ฌธ์ด ํ•œ ๋ฒˆ ๋” ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ๊ฐ์•ˆํ•ด ์ตœ๋Œ€๊ฐ’์— 1์„ ๋”ํ•ด์„œ ์ถœ๋ ฅ
  • ์ •๋ ฌ ์ „ index๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ mData ํด๋ž˜์Šค ์ •์˜
    • Comparable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ ์šฉ
      • compareTo() ๋ฉ”์†Œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œํ•ด์„œ Arrays.sort()์—์„œ value ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ
        • ๋ฐ˜ํ™˜๊ฐ’์ด ์Œ์ˆ˜์ด๋ฉด ์ธ์ˆ˜๊ฐ€ ๋” ๋น ๋ฅธ ์ˆ˜
        • ๋ฐ˜ํ™˜๊ฐ’์ด ์–‘์ˆ˜์ด๋ฉด ํด๋ž˜์Šค ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๊ฐ€ ๋” ๋น ๋ฅธ ์ˆ˜
      • mData ์ƒ์„ฑ์ž์—์„œ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋„ ํ˜ธ์ถœํ•ด์ฃผ์–ด์•ผ ํ•จ

๐Ÿ”ธ end ๐Ÿ”ธ

  • ์ƒ๊ฐํ–ˆ๋˜ ๊ฒƒ ๋ณด๋‹ค ๋” ์–ด๋ ค์› ๋˜ ๋ฌธ์ œ์˜€๋‹ค. ์ƒ๊ฐ์ง€๋„ ๋ชปํ•œ ํ’€์ด๋ฒ•์ด ์ ์šฉ๋˜์„œ ๊ต์žฌ ์—†์ด๋Š” ํ’€์ง€ ๋ชปํ–ˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.
  • ๋ฒ„๋ธ” ์ •๋ ฌ ์˜ˆ์‹œ ์ฝ”๋“œ๊ฐ€ ์ฃผ์–ด์ ธ์„œ, ๋‹จ์ˆœ ๋ฒ„๋ธ” ์ •๋ ฌ ๊ตฌํ˜„์ธ๊ฐ€? ์ด๊ฒŒ ์™œ ๊ณจ๋“œ2์ง€? ํ–ˆ๋Š”๋ฐ ์™„์ „ ์ž˜๋ชป ์ƒ๊ฐํ–ˆ๋‹ค.
    • ๋ฒ„๋ธ” ์ •๋ ฌ์„ ์™„์ „ํžˆ ์ดํ•ดํ•˜๊ณ  ์žˆ๋Š”์ง€ ๋ฌผ์œผ๋ฉฐ, ์ •๋ ฌ ์™„๋ฃŒ๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ swap์ด ์—†๋Š” ๋ฃจํ”„ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์„ ํ™œ์šฉํ•œ ๋ฌธ์ œ์˜€๋‹ค.
    • ๊ทธ๋ฆฌ๊ณ  ๋” ๋‚˜์•„๊ฐ€ ์ •๋ ฌ ์™„๋ฃŒ๊ฐ€ ๋ช‡ ๋ฒˆ์งธ ๋ฃจํ”„์ธ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด, ์ธ๋ฑ์Šค ์ฐจ์ด์˜ ์ตœ๋Œ€๊ฐ’์ด๋ผ๋Š” ์ƒˆ๋กœ์šด ์ ‘๊ทผ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ–ˆ๋‹ค.
  • ์ด์ „์— ๋ฒ„๋ธ”์ •๋ ฌ์˜ ๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ๋ฅผ ํ’€๊ณ ์™€์„œ, ๋ฌธ์ œ์— ์ฃผ์–ด์ง„ c++์ฝ”๋“œ์˜ ๋ฒ„๋ธ”์ •๋ ฌ์—์„œ ๋ฐ”๊นฅ์ชฝ for๋ฌธ์˜ ์ธ๋ฑ์Šค ๋ฒ”์œ„๊ฐ€ N+1 ๊นŒ์ง€์ธ ๊ฑธ๋ณด๊ณ  ์˜คํƒ€์ธ๊ฐ€ ์ƒ๊ฐํ–ˆ๋‹ค.
    • ํ•˜์ง€๋งŒ ๋ช‡ ๋ฒˆ์žฌ ๋ฃจํ”„์ธ์ง€ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋งˆ์ง€๋ง‰ 1ํšŒ ๋” ๋ฐ˜๋ณต์„ ์œ„ํ•œ ๊ฒƒ์ด์—ˆ๊ณ , ๊ณจ๋“œ 2๋ฌธ์ œ๋ฅผ ๋งŒ๋งŒํ•˜๊ฒŒ ๋ณธ ๋‚ด๊ฐ€ ๋ถ€๋„๋Ÿฌ์›Œ์กŒ๋‹ค...
    • ์ด ๋ถ€๋ถ„์—์„œ ๋งˆ์ง€๋ง‰ ์ถœ๋ ฅ์— +1์„ ํ•ด์•ผํ•˜๋Š” ์ž‘์—…๋„ ์ถ”๊ฐ€์‹œํ‚ค๋Š”๊ฒŒ ์žฌ๋ฏธ์žˆ์—ˆ๋‹ค.
  • ๋ฒ„๋ธ” ์ •๋ ฌ์˜ ํ™œ์šฉ์„ ๋ณด๋‹ˆ ์ดํ•ด๋Š” ์™ ๋˜๋ฉด์„œ๋„ ์–ด๋–ป๊ฒŒ ์ด๋Ÿฐํ’€์ด๊ฐ€ ์žˆ์ง€ ํ•˜๋ฉด์„œ ์•„์ฃผ ํฅ๋ฏธ๋กญ๊ณ  ๊ฐํšŒ๊ฐ€ ์ƒˆ๋กœ์šด ๋ฌธ์ œ์˜€๋‹ค.

728x90