반응형
문제 출처
https://school.programmers.co.kr/learn/courses/30/lessons/120846
문제
약수의 개수가 세 개 이상인 수를 합성수라고 합니다. 자연수 n
이 매개변수로 주어질 때 n
이하의 합성수의 개수를 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤
n
≤ 100
생각의 과정
합성수? 오랜만에 듣는 단어라, 처음에는 합성수를 어떻게 구할 수 있을지 고민하는데 시간이 좀 걸렸습니다. 이런 수학적 개념을 프로그래밍에 적용하는 건 항상 새로운 도전 같네요. 합성수를 찾는 방법을 생각하다 보니, 약수의 개수를 세는 방식이 필요하다는 것을 깨달았습니다. 모든 수에 대해 약수를 찾아 그 개수가 3개 이상인지 확인해야 하죠.
포인트
약수를 찾아 그 개수가 3개 이상인지 확인하는 단순하지만 중요한 과정을 통해 합성수를 찾아내는 것이 핵심입니다.
내 답안
def solution(n):
output = 0 # 합성수의 개수를 저장할 변수
for i in range(4, n + 1): # 4부터 시작하는 이유는 1, 2, 3은 합성수가 아니기 때문
for j in range(2, int(i ** 0.5) + 1): # 약수를 찾기 위해 제곱근까지만 확인
if i % j == 0: # j가 i의 약수라면
output += 1 # 합성수 카운트 증가
break # 더 이상의 약수 검사는 필요 없음
return output # 합성수의 총 개수 반환
남의 풀이
def get_divisors(n):
return list(filter(lambda v: n % v ==0, range(1, n+1)))
def solution(n):
return len(list(filter(lambda v: len(get_divisors(v)) >= 3, range(1, n+1))))
결론 및 느낀점
이 문제를 통해 합성수를 찾는 방법을 다시금 상기할 수 있었으며, Python의 내장 함수와 람다 표현식을 활용하는 다른 사람의 풀이를 보고 배울 점이 많았습니다. 특히, 약수를 구하는 함수를 별도로 정의하고 이를 활용해 필터링하는 방식은 매우 효율적이고 깔끔했습니다. 프로그래밍을 배우면서 다양한 해결 방법을 볼 때마다 새로운 아이디어를 얻게 되는 것 같아요. 계속해서 다양한 코드를 보고, 배우고, 시도하는 것이 중요하다는 것을 느꼈습니다.
반응형
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / Python] 가까운 수 (0) | 2025.05.31 |
---|---|
[프로그래머스 / Python] 소인수분해 (0) | 2025.05.31 |
[프로그래머스 / Python] 369게임 (0) | 2025.05.31 |
[프로그래머스 / Python] 분수의 덧셈 (0) | 2025.05.31 |
[프로그래머스 / PCCP 기출문제 3번 / Python] 충돌위험 찾기 (0) | 2025.05.31 |