본문 바로가기

코딩테스트/코딩 테스트 입문

합성수 찾기

문제

 

# 내 풀이

def solution(n):
    answer = 0
    count = 0
    
    for a in range(1, n+1):
        for b in range(1, a+1):
            if a%b == 0: 
                count +=1
            if count>=3:
                answer += 1
                break
        count = 0
    
    return answer
  • 바깥 for 문 : n 이하의 숫자 중 합성수를 찾기 위한 for문
  • 안쪽 for 문 : 각 숫자가 합성수인지 판별을 위한 for문
  • 합성수 : 약수의 갯수가 3개 이상인 수
  • 약수 : 어떤 수를 나누었을 때 나누어떨어지는 수, 모든 수는 기본적으로 1과 자기 자신을 약수로 갖는다.

 

# GPT 풀이

def solution(n):
    count = 0
    for i in range(4, n + 1):
        for j in range(2, int(i**0.5) + 1):
            if i % j == 0:
                count += 1
                break
    return count
  • for i in range(4, n + 1) : 1, 2, 3은 합성수가 될 수 없으므로 검사에서 제외
  • for j in range(2, int(i**0.5) + 1) : 
    • 약수는 항상 작은 쪽과 큰 쪽이 쌍을 이룬다. 예를 들어, 12의 약수는 (1, 12) (2, 6) (3, 4) 같은 형태이다. 제곱근까지만(√12≒3.46) 검사하면 나머지는 1과 자기 자신인 수이므로 합성수가 된다.
    • 즉, i가 합성수라면 2부터 √i 중 하나로 나누어 떨어지는 경우가 반드시 존재한다.
  • i % j : i가 j로 나누어떨어진다면, 합성수가 된다.

 

 

 

# i**0.5

: i에 대한 제곱근

 

 

 

 

# Math 라이브러리 방식

import math

print("2의 루트 : ", math.sqrt(2))		// 결과 : 1.4142135623730951

 

'코딩테스트 > 코딩 테스트 입문' 카테고리의 다른 글

2차원으로 만들기  (0) 2025.03.11
모스부호  (0) 2025.03.11
중복된 문자 제거  (0) 2025.03.10
숫자 찾기  (0) 2025.03.10
배열 회전시키기  (0) 2025.03.07