코테41) 약수의 개수와 덧셈

gyu·2024년 5월 7일

Algorithm

목록 보기
42/45

📝 문제설명

두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.

제한사항
1 ≤ left ≤ right ≤ 1,000
입출력 예
left right result
13 17 43
24 27 52

처음 풀이:

def solution(left, right):
    answer = 0
    for i in range(left , right+1):
        for j in range(1, i//2+1) :
                i = -i if j**2 == i else i
        answer += i
    return answer

i) left부터 right까지의 모든 수들 = for loop
ii) 약수의 개수 구하기
ii-1)약수의 개수가 짝수인 수는 더하고
ii-2)약수의 개수가 홀수인 수는 빼기
테스트케이스 하나가 통과가 되지 않아서 계속 고민하다가
질문하기에 있는 힌트가 제곱수는 홀수의 약수개수만 가진다는 말이 있어서
다시 풀어봤는데 그래도 그 하나가 통과가 안됐다

마지막풀이:

def solution(left, right):
    answer = 0
    #iterate i from left to right
    for i in range(left, right+1):
    #To find perfect square
        if int(i**0.5) ** 2 == i: 
        #if i is perfect square - odd num of divisors
            answer -= i
        ##if not, even num of divisors
        else:
            answer += i
    return answer

그래서 찾은 게 완전제곱수 찾기
처음에 i//2만 생각하다가 9를 여기 대입해보면 4가 나와서 int(i**0.5)로 바꿨다

profile
#TechExplorer 🚀 Curious coder exploring the tech world, documenting my programming journey in a learning journal

2개의 댓글

comment-user-thumbnail
2024년 5월 9일

안녕하세요, 99클럽 그룹 리더 은딩입니다!

풀이가 자세해서 저도 공부가 됐습니다 감사합니다~
추가적으로 벨로그는 마크다운이라 코드 작성하실 때
백틱 3개 뒤에 python 적으면 색 표시 돼서 코드가 더 눈에 잘 들어올 것 같습니다~

앞으로도 힘내서 매일 TIL 도전해 보세요! 화이팅입니다 :)

99클럽 https://bit.ly/3TN5TBL

1개의 답글