관리 메뉴

솜씨좋은장씨

[Programmers] 연속된 수의 합 (Python) 본문

Programming/코딩 1일 1문제

[Programmers] 연속된 수의 합 (Python)

솜씨좋은장씨 2023. 2. 15. 12:48
728x90
반응형

코딩 1일 1문제! 오늘의 문제는 프로그래머스의 연속된 수의 합 입니다.

 

프로그래머스

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

programmers.co.kr

👨🏻‍💻 문제 풀이

1. 규칙 찾기

입출력 예시

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]

입출력 예시를 보면 규칙이 보입니다.

 

맨 첫번째 num : 3 / total : 12 / result : [3, 4, 5] 를 보면 

12를 이루는 3개의 숫자의 가장 가운데 (3을 2로 나누었을때 나오는 몫(1) 위치) 숫자는

12를 3으로 나눈 숫자(4)이고

양 옆의 숫자는 -1 / +1 한 숫자입니다.

 

num : 4 / total : 14 / result : [2, 3, 4, 5] 를 보면

14를 이루는 4개의 숫자의 가운데 왼쪽(4을 2로 나누었을때 나오는 몫(2) -1 위치)숫자는

14를 4으로 나누었을때 나오는 몫 (3) 이고

양 옆의 숫자는 -1 / +1 / +2 한 숫자입니다.

 

맨 첫번째 num : 5 / total : 5 / result : [-1, 0, 1, 2, 3] 를 보면

5를 이루는 5개의 숫자의 가장 가운데(5을 2로 나누었을때 나오는 몫(2) 위치) 숫자는

5를 5으로 나눈 숫자(1) 이고

양 옆의 숫자는 -2 / -1 / +1 / +2 한 숫자입니다.

2. 규칙을 활용하여 문제 풀기

위에서 찾은 규칙을 활용하여 문제를 풀었습니다.

먼저 기준이되는 가운데 또는 가운데 왼쪽에 들어가는 숫자를 구하는 함수를 만들었습니다.

def get_middle_num(num, total):
    return total // num

기준이 되는 숫자 양쪽으로 -1 / +1 된 숫자를 구하기 위해서

각각 더하거나 빼야할 num 개의 숫자를 구했습니다.

 

이는 기준이 되는 숫자가 들어갈 index 와 range 를 활용하여 구했습니다.

middle_idx = num // 2

start_num = middle_idx * - 1 if num % 2 == 1 else middle_idx * -1 + 1
end_num = middle_idx + 1

num 이 짝수일 경우엔 가운데 index * -1 + 1 부터 가운데 index 까지

num 이 홀수일 경우에는 가운데 index * -1 부터 가운데 index 까지의 값을 활용하였습니다.

middle_num = get_middle_num(num, total)

answer = [num + middle_num for num in range(start_num, end_num)]

마지막으로 정답은 range 에서 나온 숫자와 기준값을 더한 값으로 구하면! 끝!

👨🏻‍💻 코드 ( Solution )

def get_middle_num(num, total):
    return total // num


def solution(num, total):
    middle_idx = num // 2
    
    middle_num = get_middle_num(num, total)
    
    start_num = middle_idx * - 1 if num % 2 == 1 else middle_idx * -1 + 1
    end_num = middle_idx + 1
    
    answer = [num + middle_num for num in range(start_num, end_num)]
    
    return answer
 

GitHub - SOMJANG/CODINGTEST_PRACTICE: 1일 1문제 since 2020.02.07

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

Comments