ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 8.28.프로그래머스 문제
    TIL( Today I Learned) 2023. 8. 29. 11:08

    8.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입니다.

     

     

    내풀이

     

    def solution(num, total):
        answer = []
        start = (2 * total - num * (num - 1)) // (2 * num)
        for i in range(num):
            answer.append(start + i)
        return answer

    num = int(input("Enter the number you want as num consecutive numbers "))

    total = int(input("enter the total number "))

    print(solution(num,total))



    def solution(num, total):
        answer = []
        start = (2 * total - num * (num - 1)) // (2 * num)
        for i in range(num):
            answer.append(start + i)
        return answer
    

     

     

    다른 사람 풀이 

    그냥 공식을 이용한 나와 생각이 비슷하나 list comprehension 을 살펴봤다.

    def solution(num, total):
        return [(total - (num * (num - 1) // 2)) // num + i for i in range(num)]
    

     

    보다 직관적 - 내가 보기엔 가장 훌륭

    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
    

     

    def solution(num, total):
        # base
        # offset
        # # sum of offsets = num(num-1) / 2
        base = total - num * (num-1) / 2
        base = int(base // num)
        answer = [i for i in range(base, base+num)]
        return answer
    

     

     

     

    def solution(num, total):
        lis = [i for i in range(-total-num, num+total+1)]
    
        i = 0
        while sum(lis[i:i+num]) != total:
            i += 1
    
        return lis[i:i+num]
    

     

     

    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))
     

     

    'TIL( Today I Learned)' 카테고리의 다른 글

    9.5  (0) 2023.09.05
    8.29 . 경사하강법  (0) 2023.08.29
    8.26. 프로그래머스 에서 배우는 파이썬 문법 : if not x:  (0) 2023.08.26
    8.14.월요일  (0) 2023.08.14
    8.13.일요일  (0) 2023.08.13
Designed by Tistory.