🔗 문제 링크
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
참고 자료
'코딩테스트 연습' 카테고리의 다른 글
| [프로그래머스/Java] Lv. 0 - OX퀴즈 (0) | 2023.09.10 |
|---|---|
| [프로그래머스/Python] Lv. 2 괄호 회전하기 (0) | 2023.08.10 |
| [프로그래머스/Python] Lv. 2 이진 변환 반복하기 (0) | 2023.07.20 |
| [프로그래머스/Python] Lv. 2 최솟값 만들기 (0) | 2023.07.11 |
| [프로그래머스/Python] Lv. 2 JadenCase 문자열 만들기 (0) | 2023.07.09 |