코딩 테스트 연습/[프로그래머스] Python

[LV.2] 월간 코드 챌린지 시즌2 > 약수의 개수와 덧셈

duswjd_data 2025. 6. 18. 09:58

문제

https://school.programmers.co.kr/learn/courses/30/lessons/77884
 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr



문제 설명

  • 두 정수 'left', 'right'가 매개변수로 주어질 때,
    • left부터 right 까지의 모든 수들 중에서
    • 약수의 개수가 짝수인 수는 더하고, 홀수인 수는 뺀 수를 반환
  • 제한사항: 1 ≤ left ≤ right ≤ 1,000
  • 예시) (left, right)에 (13, 17)로 입력했을 경우, 결과는 43

정답 코드 1

def solution(left, right):
    total = 0                         # 누적합을 저장할 변수
    for i in range(left, right + 1):  # left부터 right까지 반복
        count = 0                     # 약수 개수를 세는 변수
        for s in range(1, i + 1):     # 1부터 i까지 반복
            if i % s == 0:            # s가 i의 약수이면 개수 1개 증가
                count += 1
        if count % 2 == 0:            # 약수 개수가 짝수이면 더하고
            total += i
        else:                         # 약수 개수가 홀수이면 빼기
            total -= i
    return total                      # 최종 합계 반환

정답 코드 2

def solution(left, right):
    total = 0
    for i in range(left, right+1):
        count = 0
        for s in range(1, i+1):
            if i%s==0:
                count+=1
        total+= i if count%2 == 0 else -i   # 한 줄로 더하기/빼기 처리
    return total

오답 코드

def solution(left, right):
    total = 0
    for i in range(left, right+1):
        count = 0
        for s in range(1, i+1):
            if i%s==0:
                count+=1
        total+=i if count%2==0 else total-=i
    return total

틀린 이유

삼항 연산자와 할당 연산자 혼용 불가

  • 방법 1: 조건에 따라 나누기
if count%2==0:
    total+=i
else:
    total-=i

 

  • 방법 2: 삼항 연산자를 값으로만 쓰기
total+= i if count%2 == 0 else -i
  • i if count % 2 == 0 else -i 전체가 하나의 값
    • total += (i 또는 -i)로 변환 가능