알고리즘 풀이/프로그래머스

[Level 2] 숫자의 표현

mhko411 2021. 2. 24. 20:22
728x90

programmers.co.kr/learn/courses/30/lessons/12924

 

코딩테스트 연습 - 숫자의 표현

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

programmers.co.kr


접근

투포인터를 사용해보았다.

1~n까지 포함된 리스트를 생성하였고 left와 right는 각 숫자의 인덱스를 가리키도록 하였다.

그리고 left부터 right까지의 합이 n미만이면 right를 증가 초과면 left를 증가시켜 합이 n이 되는 연속된 수의 합을 찾았다.

 

구현

left가 right를 넘어서거나 right가 n을 넘어서면 while문을 종료시켰다.

그리고 left와 right가 같은 곳을 가리키면 total에 left를 넣었으면 다른 숫자를 가리킬 때는 left부터 right까지의 숫자들을 합하였다.

이렇게 연속된 수들을 합한 결과가 n미만이면 right를 증가시켰고 초과한다면 left를 증가시켰다. 

그리고 합이 n과 같다면 최종해인 answer를 증가시키면서 right도 증가시켰다.

예를 들어 n이 15가 들어오고 합이 n과 같을 때 left를 증가시킨다면 left가14 right15일 때 15를 또 증가시켜 n을 가리키는 것이 중복되어 틀리게된다. 따라서 right를 증가시키도록 했다.

def solution(n):
    answer = 0
    numbers = [i+1 for i in range(n)]
    left = right = 0
    while left <= right and right <= n:
        total = 0
        if left == right:
            total = left
        else:
            total = sum(numbers[left:right+1])
        
        if total < n:
            right += 1
        elif total > n:
            left += 1
        else:
            right += 1
            answer += 1
        
    return answer

'알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글

[Level 2] 튜플  (0) 2021.02.26
[Level 2] 다음 큰 숫자  (0) 2021.02.26
[Level 3] N-Queen  (0) 2021.02.24
[프로그래머스] K번째 수 - map(), filter(), sort()  (0) 2021.02.23
[Level 3] 정수 삼각형  (0) 2021.02.23