๊ธฐ๋ก๋ฐฉ

BOJ_27172 : ์ˆ˜ ๋‚˜๋ˆ„๊ธฐ ๊ฒŒ์ž„ ๋ณธ๋ฌธ

CodingTest/Java

BOJ_27172 : ์ˆ˜ ๋‚˜๋ˆ„๊ธฐ ๊ฒŒ์ž„

Soom_1n 2024. 3. 12. 18:17

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

 

27172๋ฒˆ: ์ˆ˜ ๋‚˜๋ˆ„๊ธฐ ๊ฒŒ์ž„

ใ€Š๋ณด๋“œ๊ฒŒ์ž„์ปตใ€‹์„ ์ค€๋น„ํ•˜๋‹ค ์ง€์นœ ์€ํ•˜๋Š” ๋ณด๋“œ๊ฒŒ์ž„์ปต ์ฐธ๊ฐ€์ž๋“ค์„ ๊ฒฝ๊ธฐ์žฅ์— ๋ชฐ์•„๋„ฃ๊ณ  ๊ฒฐํˆฌ๋ฅผ ์‹œํ‚ค๋Š” ๊ฒŒ์ž„ ใ€Š์ˆ˜ ๋‚˜๋ˆ„๊ธฐ ๊ฒŒ์ž„ใ€‹์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ใ€Š์ˆ˜ ๋‚˜๋ˆ„๊ธฐ ๊ฒŒ์ž„ใ€‹์˜ ๊ทœ์น™์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

www.acmicpc.net


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

  • ์ตœ๋Œ€ 10๋งŒ๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ์ˆ˜๊ฐ€ ์ ํžŒ ์นด๋“œ๊ฐ€ ์žˆ๋‹ค. ์ด๋•Œ ์ˆ˜๋Š” 1~100๋งŒ ์‚ฌ์ด์˜ ์ •์ˆ˜์ด๋‹ค.
  • ์นด๋“œ๋“ค์„ ์„œ๋กœ ๊ฒฐํˆฌ๋ฅผ ๋ฒŒ์—ฌ์„œ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋ฉด, ๋‚˜๋ˆ„๋Š” ์ˆ˜๋Š” +1, ๋‚˜๋ˆ„์–ด์ง„ ์ˆ˜๋Š” -1 ์ ์„ ๋ฐ›๋Š”๋‹ค.
  • ๋ชจ๋“  ์นด๋“œ๋“ค์„ ๊ฒฐํˆฌ์‹œ์ผœ ์ตœ์ข… ์ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ ๋ฌธ์ œ ํ’€์ด ๐Ÿ”ธ

  • N์ด 10๋งŒ์ด๋ฏ€๋กœ O(NlogN)๋กœ ๋น„๊ตํ•˜๋ฉด, 100์–ต๋ฒˆ์œผ๋กœ ์ œํ•œ ์‹œ๊ฐ„์ธ 1์ดˆ๋ฅผ ์ดˆ๊ณผํ•˜๊ฒŒ ๋œ๋‹ค.
  • ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๋ฅผ ํ™œ์šฉํ•ด์„œ ์†Œ์ˆ˜๊ฐ€ ์•„๋‹Œ, ์นด๋“œ ์ˆซ์ž์˜ ๋ฐฐ์ˆ˜ ์ธ๋ฑ์Šค๋งŒ ํ™•์ธํ•ด์„œ ๊ฒฐํˆฌ๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ’€์ดํ•˜๋ฉด ๋œ๋‹ค.
    • ์ด๋•Œ, ํ˜„์žฌ ๊ฒŒ์ž„์— ๋“ฑ์žฅํ•œ ์นด๋“œ ๋ฒˆํ˜ธ์ธ์ง€ ํ™•์ธ์ด ํ•„์š”ํ•˜๋‹ค.

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

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

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));
        StringBuilder sb = new StringBuilder();

        int N = Integer.parseInt(br.readLine());
        int[] cards = new int[N];
        boolean[] isNum = new boolean[1_000_001];
        int max = -1;

        StringTokenizer st = new StringTokenizer(br.readLine());
        for (int i = 0; i < N; i++) {
            cards[i] = Integer.parseInt(st.nextToken());
            max = Math.max(cards[i], max);
            isNum[cards[i]] = true;
        }

        int[] points = new int[max + 1];

        // ์ˆ˜ ๋‚˜๋ˆ„๊ธฐ ๊ฒŒ์ž„
        for (int i = 0; i < N; i++) {
            for (int j = 2; cards[i] * j <= max; j++) {
                if (isNum[cards[i] * j]) {
                    points[cards[i]]++;
                    points[cards[i] * j]--;
                }
            }
        }

        // ์ถœ๋ ฅ
        for (int i = 0; i < N; i++) {
            sb.append(points[cards[i]]).append(' ');
        }

        bw.write(sb.toString());
        bw.flush();
    }
}

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

  • N๊ฐœ์˜ ์นด๋“œ ์ˆซ์ž๋ฅผ ๋‹ด์€ int๋ฐฐ์—ด cards๊ฐ€ ์žˆ๋‹ค.
  • ํ˜„์žฌ ๊ฒŒ์ž„์— ๋“ฑ์žฅํ•œ ์นด๋“œ์ธ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ boolean ๋ฐฐ์—ด isNum์— ์นด๋“œ ์ธ๋ฑ์Šค์— ๋”ฐ๋ผ true๋ฅผ ์ €์žฅํ•˜๊ณ , ๋ถˆํ•„์š”ํ•œ ๊ณ„์‚ฐ์„ ์ค„์ด๊ณ ์ž ์ตœ๋Œ€๊ฐ’์„ max์— ์ €์žฅํ•˜๊ธฐ๋„ ํ–ˆ๋‹ค.
  • ํ•œ ์นด๋“œ๋ฅผ max๊นŒ์ง€ ๋ฐฐ์ˆ˜ ํ™•์ธ์œผ๋กœ ์ˆ˜ ๋‚˜๋ˆ„๊ธฐ ๊ฒŒ์ž„์„ ์ง„ํ–‰ํ•œ๋‹ค.
    • ๋ฐฐ์ˆ˜๋กœ ๋‚˜์˜จ ์ธ๋ฑ์Šค์˜ ๋ฒˆํ˜ธ๊ฐ€ ํ˜„์žฌ ๊ฒŒ์ž„์— ๋“ฑ์žฅํ•œ ์นด๋“œ ๋ฒˆํ˜ธ์ด๋ฉด, ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋Š” ์ˆ˜๋ผ๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.
  • ์นด๋“œ ๋ฒˆํ˜ธ์— ๋”ฐ๋ผ ์ ์ˆ˜ ๋ฐฐ์—ด points์˜ ์ธ๋ฑ์Šค์— ์ ‘๊ทผํ•ด ์ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  •  ์ฒ˜์Œ์—” ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚  ๊ฒƒ์ž„์„ ์•Œ์•˜์ง€๋งŒ, ํ˜น์‹œ ์—ฐ์‚ฐ์ด ๊ทธ๋ ‡๊ฒŒ ๋ฌด๊ฒ์ง€ ์•Š์•„์„œ ๊ดœ์ฐฎ์„๊นŒ ํ•˜๊ณ  O(nlogn)์œผ๋กœ ์ค‘์ฒฉ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๋ชจ๋‘ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•ด๋ดค์ง€๋งŒ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋‹ค.
    • ํƒœ๊ทธ์— ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๊ฐ€ ์žˆ๊ธธ๋ž˜ ์†Œ์ˆ˜๋Š” ๋‚˜๋ˆ„์–ด๋–จ์–ด์ง€์ง€ ์•Š์œผ๋‹ˆ๊นŒ, ์†Œ์ˆ˜๋ฅผ ๋ชจ๋‘ ์ฐพ๊ณ  ๊ทธ ์ˆ˜๋“ค์€ ๊ฒŒ์ž„์—์„œ ์ œ์™ธํ•œ๋‹ค๋Š” ๊ฑด๊ฐ€? ํ–ˆ๋Š”๋ฐ ์•„๋‹ˆ๋‚˜ ๋‹ค๋ฅผ๊นŒ ํ‹€๋ ธ๋‹ค.
  • ์งˆ๋ฌธ ๊ฒŒ์‹œํŒ์„ ์กฐ๊ธˆ ๋’ค์ ธ๋ณด๋‹ˆ ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๋ฅผ ์†Œ์ˆ˜๋กœ๋งŒ ์ดํ•ดํ•˜์ง€ ๋ง๊ณ , ๊ทธ์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋ฐฐ์ˆ˜ ์ ‘๊ทผ์„ ํ•˜๋ฉด ๋œ๋‹ค๋Š”๊ฑธ ์•Œ์•˜๋‹ค.
  • boolean ๋ฐฐ์—ด isNum์˜ ํฌ๊ธฐ๋ฅผ 1_000_000์œผ๋กœ ์ฃผ์—ˆ๋”๋‹ˆ ๋”ฑ ๋งž๊ฒŒ 1_000_000๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”์ง€, ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋‚˜์„œ ์ˆ˜์ •ํ–ˆ๋‹ค.
728x90