본문 바로가기

알고리즘

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

[level 1] 약수의 개수와 덧셈 - 77884

문제 링크

성능 요약

메모리: 10 MB, 시간: 0.40 ms

구분

코딩테스트 연습 > 월간 코드 챌린지 시즌2

채점결과

정확성: 100.0
합계: 100.0 / 100.0

제출 일자

2023년 12월 6일 16:41:25

문제 설명

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


제한사항
  • 1 ≤ leftright ≤ 1,000

입출력 예
left right result
13 17 43
24 27 52

입출력 예 설명

입출력 예 #1

  • 다음 표는 13부터 17까지의 수들의 약수를 모두 나타낸 것입니다.
약수 약수의 개수
13 1, 13 2
14 1, 2, 7, 14 4
15 1, 3, 5, 15 4
16 1, 2, 4, 8, 16 5
17 1, 17 2
  • 따라서, 13 + 14 + 15 - 16 + 17 = 43을 return 해야 합니다.

입출력 예 #2

  • 다음 표는 24부터 27까지의 수들의 약수를 모두 나타낸 것입니다.
약수 약수의 개수
24 1, 2, 3, 4, 6, 8, 12, 24 8
25 1, 5, 25 3
26 1, 2, 13, 26 4
27 1, 3, 9, 27 4
  • 따라서, 24 - 25 + 26 + 27 = 52를 return 해야 합니다.

풀이

def solution(left, right):
    answer = 0
    for num in range(left, right+1):
        cnt = 0
        for i in range(1, num+1):
            if num % i == 0:
                cnt += 1

        if cnt % 2 == 0:
            answer += num
        else:
            answer -= num
    return answer

느낀점

for를 하나만 사용해서 풀이가 바로 생각나지 않아서 2번을 사용해서 구현했다. 처음 for에서는 주어진 번호를 순차적으로 접근하고, 그 다음 for에서는 num에 해당하는 번호를 1~num에 해당되는 번호로 나뉘어 지는지 확인하고, 만약 나머지가 0이면 cnt를 1씩 증가시킨다. 해당 for문이 종료되면 cnt의 갯수가 홀수인지 짝수인지 판단하여 짝수면 num을 더하고 홀수면 num을 빼서 return 한다.

아직은 실력이 부족해서 단번에 for를 하나만 사용해서 구현하기가 힘들었지만, 앞으로의 연습을 통해 자료구조와 알고리즘을 더 공부해서 효율적인 코드를 짜는것을 목표로 공부해야겠다.

'알고리즘' 카테고리의 다른 글

프로그래머스: 이상한 문자 만들기  (0) 2023.12.16
프로그래머스: 예산  (0) 2023.12.16
프로그래머스: 가장 큰 수  (0) 2023.12.16
프로그래머스: H-index  (1) 2023.12.15
백준 1026번  (0) 2023.12.14