오랑우탄의 반란

프로그래머스 | 기사단원의 무기 (파이썬) n의 약수 개수 구하기 본문

PYTHON/프로그래머스

프로그래머스 | 기사단원의 무기 (파이썬) n의 약수 개수 구하기

5&2 2024. 8. 6. 15:03
반응형

 

오늘도 오랑이는 문제를 풉니다. 

 

 

기사단원의 무기

 무기점의 주인이 무기를 모두 만들기 위해 필요한 철의 무게 return

 

풀이 과정

  • number 까지의 숫자들 각각의 약수의 개수 구하기
  • 약수의 개수가 limit 이하인지 확인하기
  • limit을 초과하는 경우 power 로 대체하기
  • 최종 숫자들의 합 구하기

 

우선 약수의 개수부터 구해줍니다. 

처음에 count = 0을 첫번째 for 문 밖에 둬서 계속 결과가 틀렸다고 나왔는데, number 이하의 모든 숫자에 대해 count가 리셋되도록 꼭 for문 안에 넣어줘야 합니다. 

for num in range(1, number+1):
    count = 0
    for i in range(1, int(num**0.5)+1):
        if num%i==0:
            if i == (num // i):
                count += 1
            else:
                count += 2

 

또한 약수를 구하는 과정에서 num 까지의 모든 수를 확인할 필요는 없고, 제곱근까지만 확인하면 훨씬 효율적입니다.

제곱근일 경우 약수가 하나뿐이기 때문에 1만 더해주고, 나머지 경우에 대해서는 2를 더해줍니다. (약수는 항상 짝을 이루기 때문)

 

이제 count 가 limit을 초과하는지의 여부, 만약 초과하는 경우 power 로 대체해주는 작업을 합니다.

 

처음에는 리스트에 count 값을 하나하나 저장해서 limit와 대조해보는 것을 생각했었는데, 

최종 결과가 어차피 count의 합계를 구하는 것이기 때문에 answer 에 count를 더해주기만 해도 충분하더군요.

 

그렇기 때문에 마지막 단계인 최종 count들의 합 구하기와 동시에 진행해줍니다. 

이때 answer = 0 은 for문 밖에 위치하도록 주의합니다. 

반복문과 조건문이 많을 경우 항상 인덴트를 잘 해야 하는데 오랑이는 인덴트 실수가 잦습니다.. 

answer = 0

for num in range(1, number+1):
    if count > limit:
        answer += power
    else: 
        answer += count
return answer

 

각 숫자 num 에 대해 먼저 인수 개수를 구한 후, 이어서 count 를 판별합니다. 

count가 limit보다 클 경우 최종 답 answer 에 power 를 더해주고, 그게 아닌 경우 그대로 count를 더해줍니다. 

두 코드를 합해주면 아래와 같습니다. 

 

최종 코드

def solution(number, limit, power):
    answer = 0
    for num in range(1, number+1): # 각 숫자에 대해
    
    # 약수 개수 구하기
        count = 0
        for i in range(1, int(num**0.5)+1):
            if num%i==0:
                if i == (num // i):
                    count += 1
                else:
                    count += 2
    
    # 약수 개수가 limit 이하인지 확인, 아니면 power로 대체           
        if count > limit: 
            answer += power
        else: 
            answer += count
            
    return answer

 

 


 

오랑우탄이 영어를 하고 오랑이가 코드마스터가 되는 그날까지~

 

 

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

반응형