๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿ’ป Computer Science/- Data Structure, Algorithm

[์•Œ๊ณ ๋ฆฌ์ฆ˜ PS] ๋ฐฑ์ค€ 2805๋ฒˆ ๋‚˜๋ฌด ์ž๋ฅด๊ธฐ ์ž๋ฐ” ๋ฌธ์ œํ’€์ด

by Wonit 2021. 2. 13.

๋ฌธ์ œ

ํ•ด๋‹น ํฌ์ŠคํŒ…์€ ๋ฐฑ์ค€์˜ 2805๋ฒˆ ๋‚˜๋ฌด ์ž๋ฅด๊ธฐ ์˜ ์ ‘๊ทผ๊ณผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•œ ๊ธ€ ์ž…๋‹ˆ๋‹ค.
์ •๋‹ต ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์‹œ๋ ค๋ฉด solve url ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๋จผ์ € ์ƒ๊ฐํ•ด๋ณด์ž.

๋ฌธ์ œ ์ ‘๊ทผ

์ด ๋ฌธ์ œ๋Š” ์ง€๋‚œ ๋žœ์„  ์ž๋ฅด๊ธฐ ๋ฌธ์ œ์™€ ๋น„์Šทํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.


์šฐ์„  ๋ฌธ์ œ๋ฅผ ์ฝ๊ณ  ์–ด๋–ค ๊ฒƒ์„ ์›ํ•˜๋Š”์ง€ ํŒŒ์•…๋ถ€ํ„ฐ ํ•ด๋ณด์ž.

 

์šฐ๋ฆฌ์—๊ฒ ๋‚˜๋ฌด์˜ ์ˆ˜ N๊ณผ ๊ทธ์— ๋”ฐ๋ฅธ ๋‚˜๋ฌด๋“ค์˜ ๋†’์ด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.


๊ทธ๋ฆฌ๊ณ  ์ƒ๊ทผ์ด๊ฐ€ ์ง‘์— ๊ฐ€์ ธ๊ฐ€์•ผ ํ•  ๋‚˜๋ฌด์˜ ๋†’์ด๋˜ํ•œ ์ฃผ์–ด์ง„๋‹ค.

 

๊ทธ๋Ÿผ ์ด๋ฅผ ํ•œ ๋ฌธ์žฅ์œผ๋กœ ์ •๋ฆฌํ•ด๋ณด์ž.

๋‚˜๋ฌด์˜ ์ˆ˜ N๊ณผ ๊ฐ๊ฐ์˜ ๋‚˜๋ฌด ๋†’์ด์™€ ์ƒ๊ทผ์ด๊ฐ€ ํ•„์š”ํ•œ ๋‚˜๋ฌด์˜ ๋†’์ด M์ด ์ฃผ์–ด์ง€๊ณ  M์ด ์ตœ์†Œ๊ฐ€ ๋˜๋Š” ์ ˆ๋‹จ๊ธฐ ๋†’์ด๋ฅผ ๊ตฌํ•˜๋ผ.

๊ทธ๋Ÿผ ์ ˆ๋‹จ๊ธฐ ๋†’์ด๋ฅผ 1 ~ ๋‚˜๋ฌด ์ตœ๋Œ€ ๋†’์ด์ธ 20์–ต ๊นŒ์ง€ ์„ค์ •ํ•ด์„œ ํƒ์ƒ‰ํ•˜๊ณ , m์ด ๋˜๋Š” ์ตœ์†Œ์˜ ์ ˆ๋‹จ๊ธฐ ๋†’์ด๋ฅผ ๊ตฌํ•˜๋ฉด ๋˜์ง€ ์•Š์„๊นŒ?

 

์ด ์™„์ „ ํƒ์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๋ ค๋ฉด ํ•˜๋‚˜์˜ ์ „์ œ ์กฐ๊ฑด์ด ํ•„์š”ํ•˜๋‹ค.

 

๋ฐ”๋กœ ์ตœ์•…์˜ ๊ฒฝ์šฐ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ํ†ต๊ณผ ํ•  ๊ฒƒ์ธ์ง€.

 

๋‚˜๋ฌด์˜ ๋†’์ด๋Š” 10์–ต์ด๋‹ค.

 

๊ทธ๋Ÿผ ์ตœ์•…์˜ ๊ฒฝ์šฐ ๋‚˜๋ฌด์˜ ๋†’์ด๊ฐ€ 10์–ต ์ผ ๋•Œ, ์ ˆ๋‹จ๊ธฐ ๋†’์ด๋ฅผ 1๋ถ€ํ„ฐ ์ถœ๋ฐœํ•œ๋‹ค๋ฉด 10์–ต๋ฒˆ ๋ฐ˜๋ณต์„ ๋Œ์•„์•ผ ํ•˜๋ฏ€๋กœ ์ ˆ๋Œ€ ์ œํ•œ ์‹œ๊ฐ„ ๋‚ด์— ํ†ต๊ณผํ•  ์ˆ˜ ์—†๋‹ค.

 

๊ทธ๋Ÿผ ์—ฌ๊ธฐ์„œ ๋˜ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๋ฐ”๋กœ ์ด๋ถ„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

ํ•ด๊ฒฐ๋ฒ•

์ด๋ถ„ ํƒ์ƒ‰์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํƒ์ƒ‰ ์กฐ๊ฑด์„ ํ™•์ธํ•ด๋ณด์ž.

 

์šฐ์„  ์šฐ๋ฆฌ๊ฐ€ ์ฐพ์•„์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์ ˆ๋‹จ๊ธฐ์˜ ๋†’์ด์ด๋‹ค.


์ ˆ๋‹จ๊ธฐ์˜ ๋†’์ด๋Š” 1 ~ 20์–ต๊นŒ์ง€ ์ด๋ฏ€๋กœ 1 ๋ถ€ํ„ฐ 20์–ต ๊นŒ์ง€ ์ด๋ถ„ ํƒ์ƒ‰์„ ํ†ตํ•ด์„œ ๋‹ต์„ ์ฐพ์•„๋‚˜๊ฐˆ ๊ฒƒ์ด๋‹ค.

 

ํƒ์ƒ‰์˜ start์™€ end๋ฅผ mid๋กœ ๊ฐ๊ฐ ๋‚˜๋ˆŒ 2๊ฐ€์ง€ ์กฐ๊ฑด์„ ์ƒ๊ฐํ•ด๋ณด์ž.

  1. ์ž๋ฅธ ๋‚˜๋ฌด์˜ ์ด ํ•ฉ์ด n๋ณด๋‹ค ํด ๋•Œ : count >= m ์ธ ๊ฒฝ์šฐ๋Š” ๋‚˜๋ฌด๊ฐ€ ๋” ํฌ๊ฒŒ ์ž˜๋ ค์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— start๋ฅผ mid + 1 ํ•ด์ค€๋‹ค.
  2. ์ž๋ฅธ ๋‚˜๋ฌด์˜ ์ด ํ•ฉ์ด n๋ณด๋‹ค ์ž‘์„ ๋•Œ : count < m ์ธ ๊ฒฝ์šฐ๋Š” ๋‚˜๋ฌด๊ฑฐ ๋” ์ž‘๊ฒŒ ์ž˜๋ผ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— start๋ฅผ mid - 1 ํ•ด์ค€๋‹ค.

์˜ค๋‹ต ํ›„๋ณด

์ด๋ฒˆ์—๋„ ์—ญ์‹œ count์™€ mid ๊ฐ’์˜ Integer Overflow ์—๋Ÿฌ๋ฅผ ์ฃผ์˜ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

 

๊ทธ๋ž˜์„œ intํ˜•์„ ๋ฒ—์–ด๋‚  ๋ณ€์ˆ˜๋“ค์„ long์œผ๋กœ ํ• ๋‹นํ•ด์ฃผ์ž.

์ •๋‹ต ์ฝ”๋“œ

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        String[] nm = br.readLine().split(" ");
        int n = Integer.parseInt(nm[0]);
        int m = Integer.parseInt(nm[1]);

        long[] arr = new long[n];
        String[] trees = br.readLine().split(" ");
        long max = 0;
        for (int i = 0; i < trees.length; i++) {
            arr[i] = Long.parseLong(trees[i]);
            max = Math.max(max, arr[i]);
        }

        long start = 1;
        long end = 1_000_000_000;
        long answer = 0;
        while(start <= end) {
            long mid = start + (end - start) / 2;
            long count = 0;
            for(long value : arr) {
                if(value - mid > 0) {
                    count += Math.abs(value - mid);
                }
            }

            if(count >= m) {
                answer = Math.max(answer, mid);
                start = mid + 1;
            }else {
                end = mid - 1;
            }
        }

        bw.write(String.valueOf(answer));

        bw.flush();
        bw.close();
    }
}

๋ฌธ์ œ ํšŒ๊ณ 

์ด๋ฒˆ ๋ฌธ์ œ์—์„œ๋Š” ์ ˆ๋‹จ๊ธฐ์˜ ์ตœ๋Œ€ ๋†’์ด๋ฅผ ์ž…๋ ฅ๋ฐ›์€ ๋‚˜๋ฌด๋“ค์˜ ์ตœ๋Œ€ ๋†’์ด๋กœ ์„ค์ •ํ•ด๋ฒ„๋ ค์„œ 2๋ฒˆ์ด๋‚˜ ํ‹€๋ ธ๋˜ ๋ฌธ์ œ์ด๋‹ค.
์ ˆ๋‹จ๊ธฐ์˜ ์ตœ๋Œ€ ๋†’์ด์™€ ๋‚˜๋ฌด๋“ค์˜ ์ตœ๋Œ€ ๋†’์ด์™€๋Š” ์ „ํ˜€์ƒ๊ด€์ด ์—†๋‹ค.
์™œ ๋‚ด๊ฐ€ ๋‚˜๋ฌด ์ตœ๋Œ€ ๋†’์ด๊ฐ€ ์ƒ๊ด€์ด ์žˆ๋ƒ๊ณ  ์ƒ๊ฐํ–ˆ๋ƒ๋ฉด, ์ง€๋‚œ ๋žœ์„  ์ž๋ฅด๊ธฐ์—์„œ ์ž๋ฅด๋Š” ๋žœ์„ ์˜ ๊ธธ์ด์˜ ์ตœ๋Œ€๋ฅผ ์ž…๋ ฅ๋ฐ›์€ ๋žœ์„ ์˜ ์ตœ๋Œ€ ๊ธธ์ด๋กœ ์„ค์ •ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
์ง€๋‚œ๋ฒˆ์—๋Š” ์ž…๋ ฅ๋ฐ›์€ ๋žœ์„ ์˜ ์ตœ๋Œ€ ๊ธธ์ด๊ฐ€ ์ž๋ฅด๋Š” ๋žœ์„ ์˜ ๊ธธ์ด๋ณด๋‹ค ์ž‘์„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด์—ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์ง€๊ธˆ์€ ๋‚˜๋ฌด๊ฐ€ ๋” ๋†’์ด๊ฐ€ ๊ธธ ์ˆ˜๋„ ์žˆ๊ณ , ์ž˜๋ผ์•ผ ํ•˜๋Š” ์ ˆ๋‹จ๊ธฐ๊ฐ€ ๋” ๋†’์•„์•ผํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์„ค์ •์„ ์ž˜ ํ•ด์ค˜์•ผ ํ–ˆ๋‹ค.

์ •๋‹ต ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์‹œ๋ ค๋ฉด solve url ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€