프로그래머스 연속된 수의 합 [ Python ]
2023. 4. 18. 23:28ㆍ알고리즘/프로그래머스
문제 설명
연속된 세 개의 정수를 더해 12가 되는 경우는 3, 4, 5입니다. 두 정수 num과 total이 주어집니다. 연속된 수 num개를 더한 값이 total이 될 때, 정수 배열을 오름차순으로 담아 return하도록 solution함수를 완성해보세요.
제한사항
1 ≤ num ≤ 100 |
0 ≤ total ≤ 1000 |
num개의 연속된 수를 더하여 total이 될 수 없는 테스트 케이스는 없습니다.
입출력 예
num | total | result |
3 | 12 | [3, 4, 5] |
5 | 15 | [1, 2, 3, 4, 5] |
4 | 14 | [2, 3, 4, 5] |
5 | 5 | [-1, 0, 1, 2, 3] |
입출력 예 설명
입출력 예 #1
num = 3, total = 12인 경우 [3, 4, 5]를 return합니다.
입출력 예 #2
num = 5, total = 15인 경우 [1, 2, 3, 4, 5]를 return합니다.
입출력 예 #3
4개의 연속된 수를 더해 14가 되는 경우는 2, 3, 4, 5입니다.
입출력 예 #4
설명 생략
코드
def solution(num, total):
answer = []
avg = total // num
# avg 변수에 평균값을 넣어준다. 이 평균값은 리스트의 중간숫자이다.
for i in range(0, num):
answer.append(i)
# 리스트를 0 부터 인덱스인 num 까지 넣어준다.
end_loop = 0
# while 문을 종료시키기 위한 end_loop 변수 선언
# while 문은 end_loop 변수가 1 이 되면 루프를 종료한다.
while end_loop != 1:
sumList = sum(answer)
# answer 의 모든 리스트 값을 더해 sumList 에 저장한다.
for i in range(0, num):
# 인덱스의 길이만큼 for문을 반복한다.
if sumList < total:
answer[i] += 1
# answer 의 합계보다 문제에서 준 total 을 비교해 total 값이 크면
# answer 의 값들을 1 더해준다.
if sumList > total:
answer[i] -= 1
# answer 의 합계보다 문제에서 준 total 을 비교해 total 값이 크면
# answer 의 값들을 1 빼준다.
if sumList == total:
end_loop = 1
break
# answer 의 합계와 문제에서 준 total 이 같으면 while 문을 종료한다.
return answer
Awesome 코드
# 1
def solution(num, total):
return [(total - (num * (num - 1) // 2)) // num + i for i in range(num)]
# 2
def solution(num, total):
answer = []
var = sum(range(num+1))
diff = total - var
start_num = diff//num
answer = [i+1+start_num for i in range(num)]
return answer
# 3
def solution(num, total):
if num % 2 == 1:
return list(range(total//num-num//2, total//num+num//2+1))
else:
return list(range(total//num-num//2+1, total//num+num//2+1))
회고
이번 문제는 풀면서 파이썬의 장점을 하나도 못살린 것 같았다. 다른 사람들의 코드를 봤을때 부족함을 많이 느꼈다.
코드의 길이 뿐만 아니라 반복문 한번으로 문제를 끝낸다는 것이 인상적이었다.
추가로 블로그에 다 못올린 프로그래머스 문제는 개인 Github 에 올리고있다. 아래에 링크남긴다.
https://github.com/munyeol-Yoon/programmers-prac
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 카펫 [ Python ] (0) | 2023.07.09 |
---|---|
프로그래머스 피자 나눠 먹기(1) [ Python ] (0) | 2023.04.19 |
프로그래머스 배열의 평균값 [ Python ] (0) | 2023.04.19 |
프로그래머스 머쓱이보다 키 큰 사람 [ Python ] (0) | 2023.04.18 |
프로그래머스 중복된 숫자 개수 [ Python ] (0) | 2023.04.18 |