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

[์•Œ๊ณ ๋ฆฌ์ฆ˜-PS] ๋ฐฑ์ค€ 2108๋ฒˆ ํ†ต๊ณ„ํ•™ ์ž๋ฐ” ๋ฌธ์ œํ’€์ด

by Wonit 2021. 7. 8.

๋ฌธ์ œ

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

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

๋ฌธ์ œ ์ ‘๊ทผ

์ด๋ฒˆ ๋ฌธ์ œ๋Š” Counting Sort์˜ ๊ฐœ๋… + int, double ์˜ ์ •๋ฆฌ๋งŒ ์ž˜ ๋˜์–ด์žˆ์œผ๋ฉด ํ’€ ์ˆ˜ ์žˆ๋Š” ๊ตฌํ˜„ ๋ฌธ์ œ์ด๋‹ค.

ํ•ด๊ฒฐ๋ฒ•

์ด๋ฒˆ ๋ฌธ์ œ์—์„œ ๊ฐ€์žฅ ๊นŒ๋‹ค๋กœ์šด ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ์•„๋ž˜์˜ 2๊ฐœ์ผ ๊ฒƒ์ด๋‹ค.

  1. ์ตœ๋นˆ๊ฐ’
  2. ์‚ฐ์ˆ  ํ‰๊ท 

์ตœ๋นˆ๊ฐ’

์ž…๋ ฅ ๊ฐ’์˜ ๋ฒ”์œ„๋Š” -4000 ~ 4000 ์ด๋ฏ€๋กœ ์ตœ๋Œ€ 8001 ๊ฐœ์˜ ์ˆ˜๊ฐ€ ๋“ฑ์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์ตœ๋นˆ๊ฐ’์€ ๊ฐ€์žฅ ๋งŽ์ด ๋“ฑ์žฅํ•œ ์ˆ˜๋กœ, Counting Sort ์—์„œ ์“ฐ์ด๋˜ ๊ณ„์ˆ˜ counting ์„ ์ด์šฉํ•œ๋‹ค.

์‚ฐ์ˆ  ํ‰๊ท 

์‚ฐ์ˆ  ํ‰๊ท ์—์„œ ์กฐ๊ธˆ ํ—ท๊ฐˆ๋ ธ๋Š”๋ฐ, int / int ์„ ํ•˜๋ฉด ๋ฌด์กฐ๊ฑด int ๊ฐ’์ด ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค.

ํ•˜์ง€๋งŒ ๋ฌธ์ œ์˜ ์กฐ๊ฑด์—์„œ ์†Œ์ˆ˜ ์ฒซ์งธ ์ž๋ฆฌ์—์„œ ๋ฐ˜์˜ฌ๋ฆผ ํ•˜๋ผ๊ณ  ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— int / int ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค๋ฉด ์˜ค๋‹ต์„ ๋งž๊ฒŒ๋œ๋‹ค.

๊ทธ๋ž˜์„œ int / int ๊ฐ€ ์•„๋‹Œ double / double ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค.

์ •๋‹ต ์ฝ”๋“œ

public class B2108 {

    private static int[] count = new int[8001];

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int n = Integer.parseInt(br.readLine());

        int[] numbers = new int[n];

        for (int i = 0; i < n; i++) {
            int number = Integer.parseInt(br.readLine());

            count[number + 4000]++;
            numbers[i] = number;
        }

        bw.write(average(numbers) + "\n");
        bw.write(middle(numbers) + "\n");
        bw.write(mode() + "\n");
        bw.write(range(numbers) + "\n");

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

    private static int average(int[] numbers) {

        int sum = 0;

        for(int value : numbers) {
            sum += value;
        }

        double round = (double) Math.round((double) sum / (double) numbers.length);

        return (int) round;
    }

    private static int middle(int[] numbers) {
        Arrays.sort(numbers);

        return numbers[numbers.length / 2];
    }

    private static int mode() {
        List<Integer> temp = new ArrayList<>();
        int max = count[0];
        temp.add(0 - 4000);
        for (int i = 1; i < count.length; i++) {
            if(count[i] == max) {
                temp.add(i - 4000);
            } else if(count[i] > max) {
                max = count[i];
                temp.clear();
                temp.add(i - 4000);
            }
        }

        if(temp.size() > 1) {
            Collections.sort(temp);
            return temp.get(1);
        }else {
            return temp.get(0);
        }
    }

    private static int range(int[] numbers) {
        return numbers[numbers.length - 1] - numbers[0];
    }

}

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

๋Œ“๊ธ€