본문 바로가기
Algorithm

[수학/브루트포스] 백준 1016 제곱 ㄴㄴ수 - 파이썬(Python)

by jangThang 2023. 2. 2.
반응형

백준 온라인 저지

 

[ Contents ]

     

     

    1. 문제 (링크 참조)

     

    1016번: 제곱 ㄴㄴ 수

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

    www.acmicpc.net

     

     

     

    2. 문제 풀이

     min과 max가 주어집니다. 두 정수 사이에서 제곱수의 배수가 아닌 수를 판별하여 개수를 구하는 문제입니다.

     

    2022.01.16 - [Algorithm] - [Algorithm] 브루트 포스(Brute Force)는 노가다 기법?

     

    [Algorithm] 브루트 포스(Brute Force)는 노가다 기법?

    [ Contents ] 1. 브루트 포스란? Brute(짐승 같은, 난폭한) + Force(힘, 폭력)의 합성어입니다. 무식하게 푸는 기법으로, '노가다'에 가까운 접근법입니다. 모든 경우의 수를 시험해보며 문제를 해결합니

    star7sss.tistory.com

     어렵게 느껴지지만, 때로는 정공법이 가장 간단한 솔루션이 될 수 있습니다. 문제에서 제시한대로 따라하며 답을 찾습니다.

     

     

    3. 코드

    min_num, max_num = map(int, input().split())
    val = [1 for i in range(max_num - min_num + 1)]
    cnt=0
    i=2
    while i**2 <= max_num:
        mul = min_num // i ** 2
        while mul * (i**2) <= max_num:
            if mul * (i**2) - min_num >= 0 and mul * (i ** 2) - min_num <= max_num-min_num:
                val[mul * (i**2) - min_num] = 0
            mul +=1
        i +=1
    
    print(sum(val))

     max가 넘어갈 때까지, 제곱수를 구해서 나누어지는지 확인합니다. 만약 나누어지지 않는다면 해당 수는 제곱 ㄴㄴ수입니다.

     

    star가 되고나서 Tistory

    반응형

    댓글