문제
https://school.programmers.co.kr/learn/courses/30/lessons/12924
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
Finn은 요즘 수학공부에 빠져 있습니다. 수학 공부를 하던 Finn은 자연수 n을 연속한 자연수들로 표현 하는 방법이 여러개라는 사실을 알게 되었습니다. 예를들어 15는 다음과 같이 4가지로 표현 할 수 있습니다.
1 + 2 + 3 + 4 + 5 = 15
4 + 5 + 6 = 15
7 + 8 = 15
15 = 15
자연수 n이 매개변수로 주어질 때, 연속된 자연수들로 n을 표현하는 방법의 수를 return하는 solution를 완성해주세요.
제한사항
n은 10,000 이하의 자연수 입니다.
입출력 예
n result
15 4
풀이
def solution(n):
answer = 0
for i in range(1, n+1):
sum = 0
for j in range(i, n+1):
sum += j
if sum == n: # 더한 값이 n 과 같다면
answer += 1 # 카운트 +1
break # 종료
elif sum > n: # 더한 값이 n 보다 크다면 종료
break
return answer
설명
- 완전탐색 문제
- 알고리즘 이해X. 맨 처음에는 temp 리스트를 만들어서 1부터 n 까지 list comprehension 을 해서 리스트 초기화를 했고, 그 리스트들의 합을 하나씩 체크하다가.. 결국 못했다.
- list 사용하지 않고, 그냥 이중 for문을 이용해서 i: 시작하는 숫자, j: i부터 더해지는 숫자. 로 구현 가능
-먼저 1부터 연속된 숫자의 합을 구한다.
1, 1+2, 1+2+3, ... 와 같은 규칙으로 합을 계속해서 구하고, 만약 이 합이 '같게 만들고자 하는 값'보다 크다면 더 이상 더해줄 필요가 없으므로 break를 걸었다.
- 그 다음은 2부터 연속된 숫자, 3부터 연속된 숫자의 패턴으로 완전탐색을 진행했다. -> 이래서 2중 for문 사용
기본적으로 2중 for문으로 구성되어있으므로, for문 내의 로직에 O(N) 이상인 코드가 들어가면 효율성에서 탈락할 것이므로 이 점을 유의해서 로직을 구성하자.
'Coding Test > Python' 카테고리의 다른 글
| [프로그래머스] 짝지어 제거하기 (0) | 2023.06.07 |
|---|---|
| [프로그래머스] 피보나치 수 (0) | 2023.06.07 |
| [프로그래머스] 이진 변환 반복하기 (0) | 2023.06.07 |
| [프로그래머스] 최솟값 만들기 (0) | 2023.06.06 |
| [Python] 프로그래머스 - 최댓값과 최솟값 (0) | 2023.06.06 |