๋ฌธ์ œ ํ•ด๊ฒฐ (PS)/์ฝ”ํ…Œ TIL

[Java] ์ •๋ ฌ, ๊ทธ๋ฆฌ๋”” | ๋ฐฑ์ค€ 1083 ์†ŒํŠธ

9taetae9 2024. 11. 17. 10:15
728x90

https://www.acmicpc.net/problem/1083

 

์ ‘๊ทผ ๋ฐฉ๋ฒ• :

 

๊ทธ๋ฆฌ๋””ํ•˜๊ฒŒ ๊ฐ ์œ„์น˜์—์„œ ํ˜„์žฌ ๋ฒ”์œ„ ๋‚ด ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ์•ž์œผ๋กœ ์ด๋™์‹œํ‚จ๋‹ค.

- S์˜ ์ œํ•œ ๋•Œ๋ฌธ์—, ๊ฐ€๋Šฅํ•œ ๊ตํ™˜ ํšŸ์ˆ˜(j - i <= S)๋ฅผ ๊ณ ๋ คํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

๋‘ ์›์†Œ ๊ตํ™˜ ๊ณผ์ • :

  • ํ˜„์žฌ ์œ„์น˜ i ์—์„œ i+1๋ถ€ํ„ฐ i+S๋ฒ”์œ„ ๋‚ด์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ์ฐพ๋Š”๋‹ค.
  • ํ•ด๋‹น ๊ฐ’์„ i๋กœ ์ด๋™์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์ธ์ ‘ ์›์†Œ ๊ฐ„ ๊ตํ™˜์„ ๋ฐ˜๋ณตํ•œ๋‹ค. (๋ฒ„๋ธ” ์†ŒํŠธ์™€ ์œ ์‚ฌ)
  • ๊ฐ’์„ ์ด๋™ ์‹œํ‚ค๋Š” ๋ฐ ์‚ฌ์šฉํ•œ ๊ตํ™˜ ํšŸ์ˆ˜๋งŒํผ S๋ฅผ ๊ฐ์†Œ์‹œํ‚จ๋‹ค.

์ข…๋ฃŒ ์กฐ๊ฑด : S๊ฐ€ 0์ด ๋˜๊ฑฐ๋‚˜, ๋ฐฐ์—ด์„ ๋๊นŒ์ง€ ํƒ์ƒ‰ํ–ˆ์„ ๊ฒฝ์šฐ ์ข…๋ฃŒ

 

ํ•ต์‹ฌ ์ฝ”๋“œ 

S ์ œํ•œ ๋‚ด์—์„œ ๊ฐ€์žฅ ์™ผ์ชฝ ์ž๋ฆฌ๋ถ€ํ„ฐ ์ตœ๋Œ€ ๊ฐ’์œผ๋กœ ์ฑ„์›Œ์ฃผ๋Š” ๊ฒƒ์— ์ง‘์ค‘ํ•œ๋‹ค.

๋งค ๋ฐ˜๋ณต ๋งˆ๋‹ค S-=(maxIndex - i); ๋กœ ๊ตํ™˜ํ•œ ํšŸ์ˆ˜๋งŒํผ S๋ฅผ ๊ฐ์†Œ์‹œ์ผœ์ค€๋‹ค.

private static void solve(){
    for(int i=0; i<N; i++){
        int maxIndex = i;
        for(int j=i+1; j<N && j-i<=S; j++){
            if(list.get(maxIndex) < list.get(j)){
                maxIndex = j;
            }
        }

        for(int j=maxIndex; j>i; j--){
            Collections.swap(list, j, j-1);
        }

        S -= (maxIndex - i);
    }
    printList();
}

 

์ „์ฒด ์ฝ”๋“œ 

public class BOJ1083 {
    static List<Integer> list;
    static int N,S;
    public static void main(String[] args) throws Exception {
        init();
        solve();
    }

    private static void solve(){
        for(int i=0; i<N; i++){
            int maxIndex = i;
            for(int j=i+1; j<N && j-i<=S; j++){
                if(list.get(maxIndex) < list.get(j)){
                    maxIndex = j;
                }
            }

            for(int j=maxIndex; j>i; j--){
                Collections.swap(list, j, j-1);
            }

            S -= (maxIndex - i);
        }
        printList();
    }

    private static void printList(){
        for(int e : list){
            System.out.print(e+" ");
        }
    }

    private static void init() throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        N = Integer.parseInt(br.readLine());

        list = new ArrayList<>();
        StringTokenizer st = new StringTokenizer(br.readLine());
        for(int i=0; i<N; i++){
            list.add(Integer.parseInt(st.nextToken()));
        }

        S = Integer.parseInt(br.readLine());
    }
}

 

 

728x90