알고리즘
[프로그래머스] LV1. 기사단원의 무기
j9972
2023. 3. 11. 15:26
728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/136798
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
접근
1. 간단한 약수의 개수 구하는 문제
2. 인줄 알았는데 시간초과 남..
3. n+1 까지가 아니라 int(n**(0.5)) + 1 & 제곱근은 한번만 더해 중복을 피하는 것을 생각하기
풀이
실패 코드
# 약수 개수 구하는 메소드
def counting(n):
cnt = 0
for i in range(1,n+1):
if n % i == 0:
cnt += 1
return cnt
def solution(num, limit, power):
answer = 0
for n in range(1,num+1):
if counting(n) > limit:
answer += power
else:
answer += counting(n)
return answer
정답 코드
# 약수 개수 구하는 메소드
def counting(n):
cnt = 0
for i in range(1,int(n**(1/2))+1):
if n % i == 0:
if i == n//i: # 제곱근일 경우 -> 1개만 카운트하기
cnt += 1
else:
cnt += 2
return cnt
def solution(num, limit, power):
answer = 0
for n in range(1,num+1):
if counting(n) > limit:
answer += power
else:
answer += counting(n)
return answer
참고
분명 맞는데,,,왜 시간초과가 나지?? -> n+1 까지가 아니라 int(n**(0.5)) + 1 & 제곱근은 한번만 더해 중복을 피한다라는 생각을 알려주심
https://chan-lab.tistory.com/35
[프로그래머스] 기사단원의 무기 파이썬 알고리즘 문제풀이 (약수의 개수 구하기)
안녕하세요. 은공지능 공작소의 파이찬입니다. 오늘은 level 1 "기사단원의 무기" 문제 풀어보겠습니다. 효율적으로 약수의 개수를 구하는 방법이 중요한 문제입니다. 해당 문제 바로가기 링크 ↓
chan-lab.tistory.com