코딩 기록 저장소

[프로그래머스/Python] 숫자의 표현 본문

프로그래머스/Lv.2

[프로그래머스/Python] 숫자의 표현

KimNang 2023. 1. 20. 14:58

문제 정보

제목 : 숫자의 표현

난이도 : Lv.2

사용 언어 : Python

문제 링크

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

 

문제 설명

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

입출력 예 설명

입출력 예#1
문제의 예시와 같습니다.


나의 풀이

실패한 방법

이중 for문을 만들어서 sum 변수에 숫자를 더한후 만약 n과 일치하면 answer에 1을 증가시키고 내부의 for문을 break합니다. 하지만 이 방법으로는 정확성 테스트는 통과했으나 효율성 테스트에서 실패 (실행 초과)하게 되었습니다.

def solution(n):
    answer = 1
    
    for i in range(1,n) :
        
        sum = 0
        for j in range(i, n):

            sum += j
            
            if (sum == n):
                answer +=1
                break

    return answer

 

통과한 방법

효율적인 방법을 찾아야할 것 같아 팁을 찾아보던 중 i번째 숫자는 최대 int(n/i)번의 덧셈이 가능하다는 팁을 보게 되었습니다. 그래서 maxCount 변수에 int(n/i) 값을 저장한 후 내부의 for문에 count변수를 1씩 증가시키면서 비교하다가 maxCount를 넘어가면 break할 수 있도록 했습니다. 이렇게 코드를 작성하자 효율성 부분에서도 통과할 수 있었습니다.

코드

def solution(n):
    answer = 1
    
    for i in range(1,n) :
        maxCount = int(n/i)
        
        sum = 0
        count = 0
        for j in range(i, n):
            if ( count > maxCount):
                break
            
            sum += j
            
            if (sum == n):
                answer +=1
                break
            
            count +=1

    return answer