숫자의 표현

bird.j·2021년 10월 12일
0

프로그래머스

목록 보기
42/53

프로그래머스

def solution(n):
    cnt = 0

    # i부터 j까지의 합
    for j in range(n//2+1, 0, -1):
        for i in range(j-1, -1, -1):
            if j*(j+1)/2 - i*(i+1)/2 == n:
                cnt += 1
                break
    return cnt+1

처음에 이렇게 풀었다.
1부터 j까지의 합에서 1부터 i까의 합을 빼서 값이 n이 되면 카운트업하는 방식으로.
하지만 이 방식은 정확도는 100인데 효율성은 0이다..

def solution(n):
    cnt = 0

    # i부터 j까지의 합
    for j in range(n//2+1, 0, -1):
        for i in range(j-1, -1, -1):
            if j*(j+1)/2 - i*(i+1)/2 > n:
                break
            if j*(j+1)/2 - i*(i+1)/2 == n:
                cnt += 1
                break
    return cnt+1

if j*(j+1)/2 - i*(i+1)/2 > n: break 이 코드를 추가해주면 효율성도 100이 된다!
j만큼의 수에서 점점 작은 i까지의 합을 빼는 것이기 때문에 이 뺀 값도 n보다 크다면 i보다 작은 수의 합을 더해 뺐을 때는 값이 더 커질 것이기 때문에 그 이후는 볼 필요가 없다!

break하면 해당 for문 탈출해서 더 밖에 for문 이어서.

0개의 댓글