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
문제의 예시와 같습니다.
💡 나의 풀이
# 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 |