[Python] 프로그래머스 lv2 - 숫자의 표현

2022. 12. 29. 12:13알고리즘/문제풀이

[Python] 프로그래머스 lv2 - 숫자의 표현

 

코딩테스트 연습 - 숫자의 표현 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 설명

 

 

  • 주어진 것
    • 숫자 n
  • 구해야 하는 것
    • n이하의 자연수들의 합으로 n을 만들 수 있는 경우의 수
  • 선택한 접근방법 - 투 포인터
    • 선택 사유 - 숫자들을 더하고 빼면서 n이 가능한 개수 파악에 적합하다고 생각 
    • 먼저 start, end, s(sum) 지정
    • 만약 s < n일 경우
      • 합이 n이 되기전까지 end를 덧셈
      • end+=1
    • 만약 s == n인 경우
      • answer +=1
    • 만약 s > n 인경우
      • s에서 start 빼기
      • start +=1

문제 코드

 

def solution(n):
    answer = 0
    start, end =1,2
    '''
    1. 합이 n이 되기전까지 덧셈
    2. n이 되면 answer +=1
    3. n이 된 순간 다음수를 더해준다
    4. 합이 n을 넘어간 순간 가장 앞에서 더해준 숫자(start)를 제거
    5. 마지막 end가 n이 된 순간 break
    '''
    s = 1
    while end <= n:
        if s ==  n:
            answer +=1
        if s<n:
            s+=end
            end+=1
        else :
            s-= start
            start+=1
        
    return answer+1

 

마지막 부분에서 return answer + 1 하는 부분의 이유는 반복문의 조건 때문이다. 반복문 종료조건이 end <=n이므로 end는 n까지의 경우로 이때 s는 n보다 크기에 해당 경우가 집계가 되지 않는다. 값을 맞추기 위해 return의 조건이 answer + 1이 되었다.