728x90
처음 든 생각
- 자신은 디폴트로 무조건 가지고 있고 나머지 경우들을 탐색하면 된다.
- 반띵해서 완전탐색을 해줘야겠다.
나의 답
def solution(n):
answer = 1
for i in range(1,n//2+1):
total = 0
while total<n:
total += i
if total == n:
answer +=1
break
i += 1
return answer
정답의 초기값은 자기 자신을 무조건 포함하므로 1로 설정해준다.
그 다음 1부터 n//2 까지 반복문을 돌면서 연속된 숫자의 합을 계산한다. while 문으로 n보다 커질 때까지 더해준 후 내부에서 결과를 확인하는 로직을 구성한 후 목표값과 같은 경우 그게 해당하는 숫자로 시작하는 연속된 자연수 합의 조합의 유일한 경우의 수이므로 바로 while문을 탈출한다.
다른 사람의 답
# 문제가 개편되었습니다. 이로 인해 함수 구성이나 테스트케이스가 변경되어, 과거의 코드는 동작하지 않을 수 있습니다.
# 새로운 함수 구성을 적용하려면 [코드 초기화] 버튼을 누르세요. 단, [코드 초기화] 버튼을 누르면 작성 중인 코드는 사라집니다.
def expressions(num):
answer = 0
for i in range(1, num+1):
summ = 0
while (summ < num):
summ += i
i += 1
if summ == num:
answer += 1
return answer
# 아래는 테스트로 출력해 보기 위한 코드입니다.
print(expressions(15));
똑같이 완전 탐색으로 풀었으나 범위가 1부터 num까지 모든 수를 가리킨다. 이후의 로직은 연속되게 숫자를 더하면서 num과 같은지 아닌지 확인하는 방식으로 내가 푼 방식과 똑같다.
728x90
'스터디 > 코딩테스트' 카테고리의 다른 글
SWEA 5105 - 미로의 거리 (0) | 2024.01.12 |
---|---|
SWEA 4881 - 배열 최소 합 (2) | 2024.01.10 |
python 코딩테스트 - 프로그래머스 다음 큰 숫자 (3) | 2023.12.05 |
python 코딩테스트 - 프로그래머스 이진 변환 반복하기 (0) | 2023.12.04 |
python 코딩테스트 - 프로그래머스 최솟값 만들기 (2) | 2023.12.04 |