[백준 자바] 1016번(제곱 ㄴㄴ수)

2024. 6. 24. 14:22·코딩테스트/백준-Java
728x90

난이도 - 골드 1

문제

어떤 정수 X가 1보다 큰 제곱수로 나누어 떨어지지 않을 때, 그 수를 제곱ㄴㄴ수라고 한다. 제곱수는 정수의 제곱이다. min과 max가 주어지면, min보다 크거나 같고, max보다 작거나 같은 제곱ㄴㄴ수가 몇 개 있는지 출력한다.

입력

첫째 줄에 두 정수 min과 max가 주어진다.

출력

첫째 줄에 min보다 크거나 같고, max보다 작거나 같은 제곱ㄴㄴ수의 개수를 출력한다.

제한

  • 1 ≤ min ≤ 1,000,000,000,000
  • min ≤ max ≤ min + 1,000,000

 


 

728x90

min~max의 수가 제곱수의 배수인지 나타내는 배열을 생성한다.(isNoeSquares)

outerLoop: 2부터 루트max까지의 i의 제곱수를 계산한다.(square)

                  innerLoop의 시작점을 계산한다. min이 square로 나누어 떨어지면 start는 min이 되고, 그렇지 않으면 min보다 큰 수 중 가장 작은 square의 배수를 start로 한다.

innerLoop: min부터 max까지 square의 배수들을 true로 변경한다.

import java.io.*;
import java.util.StringTokenizer;

public class Main1016 {
  public static void main(String[] args) throws Exception {
    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());

    bw.write(String.valueOf(countNotSquare(min, max)));

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

  static int countNotSquare(long min, long max) {
    boolean[] isNotSquares = new boolean[(int) (max - min + 1)];

    for (long i = 2; i * i <= max; i++) {
      long square = i * i;
      long start = min % square == 0 ? min : min + (square - min % square);

      for (long j = start; j <= max; j += square) {
        isNotSquares[(int) (j - min)] = true;
      }
    }

    int count = 0;

    for (int i = 0; i < isNotSquares.length; i++) {
      if (!isNotSquares[i]) {
        count++;
      }
    }

    return count;
  }
}

728x90

'코딩테스트 > 백준-Java' 카테고리의 다른 글

[백준 자바] 1124번(언더프라임) - 소인수 개수가 소수인 수  (0) 2024.06.25
[백준 자바] 1644번(소수의 연속합)  (0) 2024.06.24
[백준 자바] 6588번(골드바흐의 추측)  (0) 2024.06.23
[백준 자바] 2226번(이진수)  (0) 2024.06.20
[백준 자바] 1373번(2진수 8진수), 2998번(8진수) - 2진수를 8진수로 바꾸기  (0) 2024.06.19
'코딩테스트/백준-Java' 카테고리의 다른 글
  • [백준 자바] 1124번(언더프라임) - 소인수 개수가 소수인 수
  • [백준 자바] 1644번(소수의 연속합)
  • [백준 자바] 6588번(골드바흐의 추측)
  • [백준 자바] 2226번(이진수)
gamzaggang7
gamzaggang7
    250x250
  • gamzaggang7
    abcdefghklpqrstuvwxyz
    gamzaggang7
  • 전체
    오늘
    어제
    • 분류 전체보기
      • CS
        • OS
        • 자료구조_알고리즘
      • Java
      • Javascript
      • Node.js
      • React
      • Vue.js
      • 코딩테스트
        • 백준-Java
        • 프로그래머스-JS
      • Canvas
      • HTML, CSS
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    canvas
    프로그래머스
    큐
    자바공부
    정렬
    npm
    백준풀이
    자바백준풀이
    자바스크립트
    vue animation
    til
    Next.js
    fecolormatrix
    스택
    Node.js
    vue modal
    css
    BFS
    fegaussianblur
    2차원배열
    자바
    hashchange
    라우팅
    vue.js
    props
    dat.gui
    해시
    React
    서버구축
    오즈코딩스쿨
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gamzaggang7
[백준 자바] 1016번(제곱 ㄴㄴ수)
상단으로

티스토리툴바