본문 바로가기
코딩테스트 연습

[프로그래머스/Python] Lv. 2 숫자의 표현

by 빙수야 팥빙수야 2023. 7. 29.

🔗 문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/12924

 

프로그래머스

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

programmers.co.kr

 

📝 문제 요약

자연수 n을 연속된 자연수들의 합으로 표현하는 방법이 여러 가지 존재합니다.

예를 들어, 15는 다음과 같이 4가지로 표현할 수 있습니다.

  • 1 + 2 + 3 + 4 + 5 = 15
  • 4 + 5 + 6 = 15
  • 7 + 8 = 15
  • 15 = 15

자연수 n이 매개변수로 주어질 때, 연속된 자연수들로 n을 표현하는 방법의 수를 return 하세요.

 

🔍 문제 풀이

제가 푼 풀이방식을 바구니에 포도를 각 바구니끼리 하나 차이가 나게끔 나누어 담는 걸로 설명해 보겠습니다.

연속된 2개의 자연수의 합으로 15를 표현할 수 있는지 알고 싶다면,

빈 바구니 2개가 있고, 포도 15개가 있다고 생각해 보세요.

 

1. 이 2개의 바구니에 15개의 포도를 하나 차이 나게 담을 수 있는지 확인하기 위해 먼저 첫 번째 바구니에 1개, 두 번째 바구니에 2개를 넣어 먼저 두 바구니에 차가 1이 되게 합니다.
2. 그다음 남은 포도의 개수 12개를 두 바구니에 같은 개수로 나누어 담을 수 있다면, 우리는 15개의 포도를 두 바구니에 한 개 차이가 되게 담을 수 있다고 판단하는 것입니다.

 

만약 연속된 3개의 자연수의 합으로 15를 표현할 수 있는지 확인하고 싶으면, 3개의 바구니에 위와 같은 과정을 통해 3개의 바구니에 1 차이 나게 담을 수 있는지 확인해 보면 됩니다.

👩🏻‍💻 전체 코드

def solution(n):
    answer = 1
    i = 3
    while n >= sum(list(range(1, i))):
        tmp = n - sum(list(range(1, i)))
        if tmp % len(list(range(1, i))) == 0:
            answer += 1
        i += 1
    return answer

 

참고 자료

https://www.inflearn.com/questions/766726