일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 개발/네트워크
- 카테캠
- 개발/CS/알고리즘
- 개발/환경
- 대외활동/카카오테크캠퍼스
- 개발/언어론
- AI/ML
- 개발/에러
- 개발/CS/OS
- 개발/보안
- 개발/컴퓨터네트워크
- ⌨️Developer
- 개발/Electron
- 알고리즘
- 카카오 테크 캠퍼스
- AI/GPT
- 개발/Java
- 카카오테크캠퍼스
- 개발/webrtc
- ⌨️Developer/보안
- 개발/프레임워크&라이브러리
- 개발/OOP
- 개발/MySQL
- 개발/언어/Java
- ai
- 개발/Java/Spring
- electron
- 개발
- 개발/Tools/프레임워크/Spring
- 취업
Archives
- Today
- Total
봄수의 연구실
Programmers_합성수찾기 본문
약수의 개수가 세 개 이상인 수를 합성수라고 합니다.
자연수 `n`이 매개변수로 주어질 때 `n`이하의 합성수의 개수를 return하도록 solution 함수를 완성해주세요.
통과한 코드 하지만, 비효율적이다
def solution(n):
answer = 0
dic ={}
for i in range(2,n+1):
for j in range(2,i):
if i%j==0:
dic[i]=1
continue
return len(dic.items())
- dictionary에 넣고 item만 세서 중복을 회피하였다
최적화
def solution(n):
answer = 0
for i in range(4, n+1):
if len([j for j in range(1, i+1) if i % j == 0]) > 2:
answer += 1
return answer
이 코드는 4부터 n까지의 모든 숫자에 대해 반복합니다.
이는 1, 2, 3은 약수의 개수가 2개 이하이므로 합성수가 아니기 때문입니다.
그 다음, 각 숫자 i에 대해 1부터 i까지의 모든 숫자 j를 검사하여 i를 j로 나눌 수 있는지 확인합니다.
이는 약수를 찾는 방법입니다.
이 결과를 리스트 컴프리헨션으로 생성하고, 그 길이를 확인합니다.
이 길이가 2를 초과하면, 그 숫자는 약수가 3개 이상인 합성수입니다.
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
'알고리즘 풀이' 카테고리의 다른 글
Programmers_문자열 내림차순으로 배치하기 (0) | 2023.08.01 |
---|---|
Programmers_명예의 전당 (0) | 2023.08.01 |
Programmers_삼각형의완성조건(2)_고범수 (0) | 2023.07.26 |
Programmers_약수의 개수와 덧셈_고범수 (0) | 2023.07.26 |
Programmers_달리기경주_고범수 (0) | 2023.07.25 |