본문 바로가기

프로그래밍/코드분석

[파이썬] (level4) 숫자의 표현

(level4)숫자의 표현

문제

스크린샷, 2017-10-24 19-09-09

접근법

스크린샷, 2017-10-24 19-12-47

풀이

def expressions(num):
    answer = 1 # 모든 num은 자기 자신을 답으로 가진다.
    _sum = 0
    left = 0

    while left != (num // 2 + 1): # left가 도달할 곳은 절반(num//2)면 충분하다.
        if _sum < num:
            for right in range(left+1, num // 2 + 1 + 1): # right는 left + 1까지 체크
                _sum += right # 합이 더 작다면, 계속해서 right를 더해준다.
                if _sum == num: # right를 더해주다가, num과 일치하면 횡재했다.
                    answer += 1 # 경우의 수를 하나 찾았으므로 +1 해준다.
                    left += 1 # left를 오른쪽으롷 한칸 옮겨서 기준점을 다시 설정한다.
                    _sum = 0  # sum을 0으로 초기화해줘야 다음 계산도 가능하다.
                    break

                elif _sum > num: # right를 더한 결과 num을 초과하면
                    left += 1 # left를 한 칸 옮겨주고,
                    _sum = 0  # _sum을 0으로 초기화 한다.
                    break
    return answer

주의할 점

range(0, a)라면 0, 1, 2, .... , a-1까지이므로 +1을 해주어야 한다.

출처

https://programmers.co.kr/learn/challenge_codes/41