Completion over Perfection

프로그래머스 - 연속된 수의 합 (파이썬3 Python3) 본문

파이썬 (Python)

프로그래머스 - 연속된 수의 합 (파이썬3 Python3)

난차차 2023. 8. 25. 00:03
반응형

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

수학적으로 접근을 해서 풀었습니다. 

 

예시를 몇개 보다보면 규칙성이 발견이 되는데, 

예를들어 첫번째 예시를 보면 num = 3 이고 total은 12로 3개의 연속된 숫자를 합하면 12가 되는 수열을 구해야합니다. 

답은 3+4+5 = 12로 3,4,5를 배열에 넣어서 리턴을 해주면 되는데 

그럼 도대체 저 3,4,5라는 숫자를 어떻게 뽑아내야하는 것인가? 가 문제가 됩니다. 

 

수학적으로 접근해서 공식화를 해보면 

num=3일경우 3개의 연속된 숫자를 합해야하므로

첫번째 숫자를 X라고 했을 때, 

 

X + (X+1) + (X+2)

 

이렇게 합한것이 12가 되어야 합니다. 

따라서 식을 좀 더 덧붙여보면

 

X + X + 1 + X + 2 = 12
→ 3X + 3 = 12

 

이 식을 만족하는 X를 구해내면 우리는 답을 구할수가 있게 됩니다. 

X는 3이 되어야 되겠죠?

그럼 문제에서 요구하는 [3,4,5]의 배열은 

X값으로 구한 3을 초기값으로 설정하고 3번 for문을 돌려서 1씩 증가한 값들을 합한 수를 배열에 넣어주면 되겠죠.

 

두번째 예시도 한번 해보면, 

num=5, total=15 이렇게 주어진 상태에서 

 

X + (X+1) + (X+2) + (X+3) + (X+4) = 15
→ 5X + 10 = 15

 

이 식에서 X를 구해야되고, X는 1이 되게 됩니다. 

그럼 답은 1부터시작해서 5로 끝나는 5개의 원소를 가진 배열이 되겠죠 ([1,2,3,4,5])

 

풀다보니까 num 숫자에 따라 저 방정식을 공식화 할 수 있을 것 같습니다. 

 

첫번째 예시와 두번째 예시를 잘 살펴보면, 

num이 3일 경우 방정식은 아래와 같이 됩니다.

 

num * X + (0 + 1 + 2) = 12
→ 3X + 3 = 12

공식화한 방정식이 처음 예시를 들었던 방정식과 같아졌습니다.

 

 

두번째 예시도 공식화된 방정식처럼 되는지 한번 볼까요? 

num이 5이고 total이 15이므로, 

 

num * X + (0+1+2+3+4) = 15
→ 5X + 10 = 15

두번째 예시도 마찬가지네요. 

 

이로써 우리는 X앞에 num을 곱해주고 뒤에는 0부터 시작해서 num만큼 1씩 증가한 수열을 합한 값이 total과 같아져야 한다는 것을 알 수 있습니다. 

 

나머지는 코드를 보고 한번 이해해보시면 될 것 같네요.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def sum(num):
    cnt = 0
    result = 0
    while cnt < num:
        result += cnt
        cnt+=1
    return result
        
 
def solution(num, total):
    answer = []
    
    # num*x+sum(num) = total
    x = (total - sum(num))/num
    x = int(x)
    
    for i in range(num):
        answer.append(x+i)        
    
    return answer
cs

 

 

 

 

 

 

반응형
Comments