애플파이썬

[프로그래머스] Lv.2 숫자의 표현 (파이썬) 본문

파이썬/프로그래머스

[프로그래머스] Lv.2 숫자의 표현 (파이썬)

유진파이 2025. 3. 21. 18:37

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

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 이하의 자연수 입니다.

정답 코드

1. 수학으로 푼 답

def solution(n):
    answer = 0
    k = 1
    while k*(k+1)//2 <= n:
        if (n-(k*(k-1)/2)) % k == 0:
            answer += 1
        k += 1
    return answer
  • 도저히 모르겠어서 gpt랑 같이 푼 코드.. ㅠㅠ (30분은 고민해봤다.. 아직 2레벨 정답률 높은 문젠데 왤케 모르겠지,,,)
  • 등차수열의 합 공식을 사용해서 푼 답이다.
    • x개부터 k개가 연속된 자연수의 합 : x + (x+1) + ... + (x+k-1) 정리하면 kx + (1+2+ .. +k-1) 
    • 등차수열 합 적용해서 정리하면 : kx + k(k-1)/2 = n
    • 이걸 x 에 대해 정리하면 : x = n/k -(k-1)/2 / x = (n-(k(k-1)/2)) / k 
    • 여기서 알 수 있는 점 ! x는 무조건 자연수이기 때문에 (n-(k(k-1)/2)) 나누기 k 를 했을 때 딱 나눠 떨어져야 됨 (나머지가 0)
    • 그래서 if 조건을 저렇게 줬어요

 

2. 완전탐색 (브루트포스트) 으로 푼 답

def solution(n):
    answer = 0
    for x in range(1, n+1):
        sum = 0
        for y in range(x, n+1):
            sum += y
            if sum == n:
                answer += 1
                break
            elif sum > n:
                break
            
    return answer​
  • 이건 완전탐색으로 푼 코드...! 인프런 강의 쌤이 그랬는데... 무조건 완전탐색으로 먼저 풀 생각을 하라고...
  • 하지만 나는 시간 효율성에 겁먹어서 이건 아예 배제시키고 생각했더니 더 꼬이고,, 아예 구현도 못한 것 같다 ㅠㅠ
  • 앞으로는 겁먹지말고 무조건 완전 탐색 먼저 생각해서 짜봐야겠다.

- 끝 -