[Python]_코딩테스트_약수의 개수와 덧셈

김희정·2024년 1월 31일
0

코딩테스트

목록 보기
8/13

[프로그래머스] 약수의 개수와 덧셈

Problem

문제설명

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

제한사항

  • 1 ≤ left ≤ right ≤ 1,000

입출력 예

leftrightresult
131743
242752

약수약수의 개수
131, 132
141, 2, 7, 144
151, 3, 5, 154
161, 2, 4, 8, 165
171, 172

Solution

약수에 대한 정의

세 정수 a,b,c에 대하여 ab = c 라면,
c 는 a, b의 배수
a, b 는 c의 약수

정답 코드

def solution(left, right):
    answer = 0
    for i in range(left, right+1):  # i = left~right까지의 숫자
        divisor_cnt = 0  # 약수의 개수를 담기 위한 변수
        for j in range(1, i+1):  # 1부터 i까지 증가하며 약수 찾아내기
            if i % j == 0:  # 나눠 떨어진다면 약수!
                divisor_cnt += 1  # 나눠 떨어진다면 약수 개수 +1 씩 더해주기
        if divisor_cnt % 2 == 0:  # 약수 개수가 짝수인가?
            answer += i   # left~right 사이 어떤 i 는 양수로 더해주고
        else:
            answer -= i  # left~right 사이 어떤 i 는 음수로 더해주자
    return answer

코드회고

  • 처음에는 left부터 right까지의 모든 수를 리스트로 모아두고, 거기서 하나씩 꺼내서 비교하는 것 밖에 떠오르지 않았다
  • 쓸데없는 빈 변수들만 무한 증식하고 있는게 이상해서, 다른 사람이 작성한 코드를 봤다.
  • for 반복문의 i와 j를 잘만 활용하면 간단하게 풀수 있는 문제였는데 엄청 빙빙 꼬면서 생각했다. 😑
(요상하게 고민한 흔적들..)
(이것저것 주석처리하고 프린트해보고 하느라 순서가 엉망진창이다)
a = 13
b = 17
answer = 0
ab_list = []
a_lst=[]

for i in range(a,b+1):
    ab_list.append(i)

for j in range(ab_list):
    if ab_list[i]



    if a % i == 0:
        a_lst.append(i)   

if len(a_lst) % 2 == 0:
    answer += len(a_lst)
else:
    answer -= len(a_lst)
    
print(ab_list)

참고한 블로그

profile
데이터 애널리스트가 되고 싶은

0개의 댓글