๊ธฐ๋ก๋ฐฉ

BOJ_1016 : ์ œ๊ณฑ ใ„ดใ„ด ์ˆ˜ ๋ณธ๋ฌธ

CodingTest/Java

BOJ_1016 : ์ œ๊ณฑ ใ„ดใ„ด ์ˆ˜

Soom_1n 2024. 2. 20. 12:04

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

 

1016๋ฒˆ: ์ œ๊ณฑ ใ„ดใ„ด ์ˆ˜

์–ด๋–ค ์ •์ˆ˜ X๊ฐ€ 1๋ณด๋‹ค ํฐ ์ œ๊ณฑ์ˆ˜๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€์ง€ ์•Š์„ ๋•Œ, ๊ทธ ์ˆ˜๋ฅผ ์ œ๊ณฑใ„ดใ„ด์ˆ˜๋ผ๊ณ  ํ•œ๋‹ค. ์ œ๊ณฑ์ˆ˜๋Š” ์ •์ˆ˜์˜ ์ œ๊ณฑ์ด๋‹ค. min๊ณผ max๊ฐ€ ์ฃผ์–ด์ง€๋ฉด, min๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , max๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ œ๊ณฑใ„ดใ„ด์ˆ˜

www.acmicpc.net



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

  • ์ฃผ์–ด์ง„ ๋ฒ”์œ„์—์„œ 1๋ณด๋‹ค ํฐ ์ˆ˜์˜ ์ œ๊ณฑ์ˆ˜๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€์ง€ ์•Š๋Š” ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
  • ์ตœ์†Œ๊ฐ’์ด 1๋ถ€ํ„ฐ 1์กฐ, ์ตœ๋Œ€๊ฐ’์€ ์ตœ์†Œ๊ฐ’๋ถ€ํ„ฐ 100๋งŒ์„ ๋”ํ•œ ๊ฐ’๊นŒ์ง€ ์ฃผ์–ด์ง„๋‹ค.

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

  • min๊ณผ max์˜ ๊ฐ’์ด 1์กฐ๊นŒ์ง€ ํฌ๊ฒŒ ์ฃผ์–ด์ง€๋ฏ€๋กœ long์œผ๋กœ ๋ฐ›์•ผ์•„ ํ•œ๋‹ค.
  • ์ œ๊ณฑ์ˆ˜๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค.
    • ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ max-min+1 ๋งŒํผ ์ฐจ์ด๋กœ ์„ ์–ธํ•œ๋‹ค.
    • ์ œ๊ณฑ์ˆ˜์˜ ๋ฐฐ์ˆ˜๋ฅผ max๊นŒ์ง€ ๊ณ„์‚ฐํ•˜๋ฉฐ ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด ๋ฐฐ์—ด์— ์ฒดํฌํ•œ๋‹ค.

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

import java.io.*;
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));
        StringTokenizer st = new StringTokenizer(br.readLine());

        long min = Long.parseLong(st.nextToken());
        long max = Long.parseLong(st.nextToken());

        boolean[] pn = new boolean[(int) (max - min + 1)];

        for (long i = 2; i * i <= max; i++) {
            long pow = i * i;
            long start_idx = min / pow;
            if (min % pow != 0) start_idx++;
            for (long j = start_idx; j * pow <= max; j++) {
                pn[(int) ((j * pow) - min)] = true;
            }
        }

        int cnt = 0;

        for (boolean p : pn) {
            if (!p) cnt++;
        }

        bw.write(Integer.toString(cnt));
        bw.flush();
    }
}

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

  • min๊ณผ max๋ฅผ long์œผ๋กœ ์ž…๋ ฅ๋ฐ›๊ณ , ๊ทธ ์ฐจ์ด๋งŒํผ ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด ๋ฐฐ์—ด pn์˜ ํฌ๊ธฐ๋กœ ์„ ์–ธํ•œ๋‹ค.
  • 2๋ถ€ํ„ฐ ์ œ๊ณฑ์ˆ˜๊ฐ€ max๋ฅผ ๋„˜์ง€ ์•Š์„ ๋•Œ ๊นŒ์ง€ ๊ณ„์‚ฐ์„ ๋ฐ˜๋ณตํ•œ๋‹ค.
    • miin์„ ์ œ๊ณฑ์ˆ˜ pow๋กœ ๋‚˜๋ˆˆ ๊ฐ’์„ ์‹œ์ž‘ ์ธ๋ฑ์Šค๋กœ ์„ ํƒํ•˜๊ณ , ๋งŒ์•ฝ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€์ง€ ์•Š๋Š”๋‹ค๋ฉด +1ํ•œ๋‹ค.
    • pow์— ๋ฐฐ์ˆ˜๊ฐ€ max๋ฅผ ๋„˜์ง€ ์•Š์„ ๋•Œ๊นŒ์ง€ ๊ณ„์‚ฐํ•ด pn์— ์ฒดํฌํ•œ๋‹ค.
  • pn์— ์ฒดํฌ๋˜์ง€ ์•Š์€ ์ธ๋ฑ์Šค์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๋ฅผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ ํƒํ•˜๋ฉด ์–ด๋ ต์ง€ ์•Š๊ฒŒ ํ’€์ด ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ด๋Œœ.
    • ํ•˜์ง€๋งŒ min๊ณผ max์˜ ๋ฒ”์œ„๊ฐ€ ํฌ๊ธฐ ๋•Œ๋ฌธ์— long์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ณ , start_idx๋ฅผ ์„ ํƒํ•˜๋Š” ๋ถ€๋ถ„์€ ๊ณ ๋ฏผ์ด ํ•„์š”ํ–ˆ๋‹ค.

 

728x90

'CodingTest > Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

BOJ_1850 : ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜  (0) 2024.02.21
BOJ_11689 : GCD(n, k) = 1  (0) 2024.02.21
BOJ_1747 : ์†Œ์ˆ˜&ํŒฐ๋ฆฐ๋“œ๋กฌ  (0) 2024.02.20
BOJ_1456 : ๊ฑฐ์˜ ์†Œ์ˆ˜  (0) 2024.02.18
BOJ_11444 : ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜ 6  (0) 2024.02.12