NIRVANA

[level 2] 숫자의 표현(다시 풀기!!) 본문

Coding test(Python3)/Programmers

[level 2] 숫자의 표현(다시 풀기!!)

녜잉 2023. 9. 28. 21:48

문제

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

1) n=n임을 표시하기 위해 answer의 초기 값을 1로 설정한다.

2) (절반만 돌아도) 되기 때문에(중복 표현이 안되므로 절반 이후의 숫자는 이미 그전 숫자들에 다 더해짐) 첫번째 반복문은 1부터 n//2+1번만큼만 돈다.

3) num = 0으로 선언해준다. 

4) 두번째 반복문은 i부터 n+1번까지 돌면서 해당 값을  num에 더한다. 

5) 만약 num이 n이라면 answer에 +1을 하고 해당 반복문(i번째의)을 나온다. 

def solution(n):
    answer = 1

    for i in range(1, int(n//2)+1):
        num = 0
        for j in range(i, n+1):
            num += j
            
            if num == n:
                answer +=1
                break
    return answer

정확성 테스트는 통과했는데 말이죠...

효율성 테스트 다 틀림...

 

 

문제 풀이 접근법2(서치의 힘을 빌림)

1) num이 n보다 커지면 반복문을 빠져나온다. 

def solution(n):
    answer = 1

    for i in range(1, int(n//2)+1):
        num = 0
        for j in range(i, n+1):
            num += j
            
            if num == n:
                answer +=1
                break
            if num > n:
                break
                
    return answer

바본가 진짜!!!

하 한줄만 추가하면 되는데 이걸 생각 못한 내가 진짜...너무 바보같음...