[ 프로그래머스 / PYTHON ] 숫자의 표현

yujeongkwon·2022년 8월 12일
0

프로그래머스 / PYTHON

목록 보기
56/77

문제설명

숫자의 표현

Finn은 요즘 수학공부에 빠져 있습니다. 수학 공부를 하던 Finn은 자연수 n을 연속한 자연수들로 표현 하는 방법이 여러개라는 사실을 알게 되었습니다. 예를들어 15는 다음과 같이 4가지로 표현 할 수 있습니다.

1 + 2 + 3 + 4 + 5 = 15
4 + 5 + 6 = 15
7 + 8 = 15
15 = 15
자연수 n이 매개변수로 주어질 때, 연속된 자연수들로 n을 표현하는 방법의 수를 return하는 solution를 완성해주세요.

제한사항
n은 10,000 이하의 자연수 입니다.

풀이 & comment

ㅁ~ㅁ 까지의 합 = 📌ToPoint
아니 저 p1 ,p2, sum 초기수 0이냐 1이냐, while 조건 =넣기 안넣기나
두번째 풀이에서도 sum
-p1 하기전에 sum판단하냐 한 후에 하냐 p1을 1부터 시작하냐 마냐 겁나 헷갈려서 겁나 오래걸림

코드

옛날 풀이

def solution(n):
    answer = 0
    for i in range(1,n+1):
        sum_ = 0
        for j in range(i,n+1):
            if sum_ == n :
                answer += 1
                break
            elif sum_ > n:
                break
            else : 
                sum_ += j             
    return answer + 1

최근 풀이 점점 발전 ->

def solution(n):
    answer,p1,p2,sum_ = 0,0,0,0
    maxp2 = n//2 + 1
    while p1<=p2 and p2<n:
        if sum_ == n:   
            answer +=1
            if p2 <= maxp2: 
                p2+=1
                sum_ += p2
            p1+=1
            sum_ -= p1
        elif sum_ < n:
            if p2 <= maxp2: 
                p2+=1
                sum_ += p2
            else:
                p1+=1
                sum_ -= p1
        else:
            p1+=1
            sum_ -= p1
    return answer+1
def solution(n):
    answer,p1,p2,sum_ = 0,0,0,0
    maxp2 = n//2 + 1
    while p2<=maxp2:
        if sum_ == n:   
            answer +=1
            p1+=1
            sum_ -= p1
        elif sum_ < n:
            p2+=1
            sum_+=p2
        else:
            p1+=1
            sum_ -= p1
    return answer

p1은 어차피 다도니까 풀이

def solution(n):
    answer,sum_,p2 = 0,0,0
    for p1 in range(1,n//2+1):
        while sum_<n and p2 <n//2+1:
            p2 +=1
            sum_ += p2
        if sum_ == n: answer += 1
        sum_-=p1
    return answer +1 if n>2 else 1
profile
인생 살자.

0개의 댓글