스터디/코딩테스트

python 코딩테스트 - 프로그래머스 숫자의 표현

공대생철이 2023. 12. 22. 17:13
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