coding test

[파이썬] 숫자의 표현

잔망루피 2020. 12. 23. 22:20

programmers.co.kr/learn/courses/30/lessons/12924

 

코딩테스트 연습 - 숫자의 표현

Finn은 요즘 수학공부에 빠져 있습니다. 수학 공부를 하던 Finn은 자연수 n을 연속한 자연수들로 표현 하는 방법이 여러개라는 사실을 알게 되었습니다. 예를들어 15는 다음과 같이 4가지로 표현 할

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

입출력 예

n result
15 4

 

입출력 예 설명

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

 

💡 나의 풀이

 

# 1개 빼고 다 실패 뜬 코드
def solution(n):
    answer=1
    for i in range(1, n//2+1):
        num=0
        for j in range(i, n):
            num+=j
            if num == 15 :
                answer+=1
                break
            elif num > 15:
                break
                
    return answer

 

n=15일 때만 통과하고 제출하니 다 틀림 ㅠㅠㅜ

n이라 써야하는데 15들어간 것 보고 고치고 for 반복문 범위도 바꿔줬다. 시간초과 뜰 줄 알았는데 안 뜸. 

아래는 통과한 코드 !!

 

# 통과한 코드
def solution(n):
    answer=1
    for i in range(1, n):
        num=0
        for j in range(i, n):
            num+=j
            if num == n :
                answer+=1
                break
            elif num > n:
                break
                
    return answer

 

n만 있어도 숫자 표현이 되므로 answer을 1로 해줬다.

첫번째 for문은 1부터 n-1까지 반복한다. 연속되는 숫자의 첫번째 숫자이다.

두번째 for문은 i부터 n-1까지 반복한다. 연속을 표현함. num이 n과 같다면 연속된 자연수들로 n을 표현했으므로 answer을 1증가 시키고 break한다. num이 n보다 클 경우 더이상 반복하는 것은 비효율적이므로 break한다. 첫번째 숫자가 1증가하고 연속해서 숫자를 더해가는 과정이 n-1까지 반복된다.

 

👓 다른사람 풀이

 

def solution(num):
    return len([i  for i in range(1,num+1,2) if num % i is 0])

 

한 줄로 끝나네 ㅠ 1부터 num까지 2씩 증가시키면서 num을 i로 나눈다.

num을 i로 나눈 나머지가 0이라면 리스트에 추가한다. 1부터 num을 홀수로 나눠서 나머지가 0이 몇 개인지 센다.

n이 x개의 연속된 자연수의 합으로 표현된다면 합은 xi이므로 n은 x의 배수이다.

왜 홀수지?

 

def solution(num):
    answer = 0
    for i in range(1, num + 1):
        s = 0
        while s < num:
            s += i
            i += 1
        if s == num:
            answer += 1

    return answer

 

나도 for문 대신에 while문을 사용했으면 더 좋았겠구나 생각이 들었다. 

반응형

'coding test' 카테고리의 다른 글

[파이썬] 내적  (0) 2020.12.24
[파이썬] 문자열을 정수로 바꾸기  (0) 2020.12.23
[파이썬] 수박수박수박수박수박수?  (0) 2020.12.23
[파이썬] 소수 구하기  (0) 2020.12.21
[파이썬] 서울에서 김서방 찾기  (0) 2020.12.21