프로그래머스 | 연속된 수의 합 [파이썬 python]

2023. 3. 19. 22:08·Algorithm/프로그래머스
 

프로그래머스

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

programmers.co.kr

 

코드

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

이 문제 또한 주어진 테스트 케이스들을 통해 규칙을 찾아야 하는 문제이다.

연속된 num개의 수의 합이 total이 되도록 해야 한다. 

문제에서 주어지는 테스트 케이스들을 살펴보면 중앙에 위치한 값이 total // num임을 알 수 있다.

첫 번째 케이스인 [3, 4, 5]에서 4가 12//3을 한 값이고, num(=3)이 홀수이므로 좌우로 ±1을 해주면 연속된 3개의 수를 구할 수 있다.

두 번째 케이스인 [1, 2, 3, 4, 5] 역시 마찬가지이다. 중앙에 위치한 3이 15//5의 결괏값이고, num(=5)이 홀수이므로 좌우로 ±1, ±2를 해주면 연속된 5개의 수를 구할 수 있다.

그럼 세번째 케이스는 어떨까.

[2, 3, 4, 5]에서 14//4의 값인 3은 두 번째에 위치한다. num(=4)이 짝수이기 때문에 중앙이라고 할 수가 없는 것이다.

그럼 홀짝에 관계없이 범위를 구하려면 어떻게 해야할까?

 

[3, 4, 5], [2, 3, 4, 5] 간의 규칙을 찾아보자.

  • [3, 4, 5]는 total//num = 4를 기준으로 [4-1, 4, 4+1]이다. 이 리스트를 range로 나타내면 파이썬에서 range는 (시작, 끝)에서 끝-1 까지의 값을 의미한다. 그러므로  [4-1, 4, 4+1]를 range로 나타내면 range(4-1, 4+2)이 된다.

    range(4-1, 4+2)를 num=3을 이용하여 또다시 식을 쓰면 (4-(3-1)//2, 4+(3+2)//2)로 나타낼 수 있다.

  • [2, 3, 4, 5]는 total//num = 3을 기준으로 [3-1, 3, 3+1, 3+2]이다. 이 리스트를 range로 나타내면 range(3-1, 3+3)이 된다.

    range(3-1, 3+3)을 num=4를 기준으로 또다시 식을 쓰면 (3-(4-1)//2), 3+(4+2)//2)로 나타낼 수 있다.

따라서 total//num을 avg라고 했을 때, range의 범위는 range(avg-(num-1)//2, avg+(num+2)//2)가 된다.

반응형
저작자표시 (새창열림)
'Algorithm/프로그래머스' 카테고리의 다른 글
  • 프로그래머스 | 행렬의 덧셈 [파이썬 python]
  • 프로그래머스 | 약수의 갯수와 덧셈 [파이썬 python]
  • 프로그래머스 | 종이 자르기 [파이썬 python]
  • 프로그래머스 | 문자열 밀기 [파이썬 python]
dduniverse
dduniverse
  • dduniverse
    dduniverse
    dduniverse
  • 전체
    오늘
    어제
    • 분류 전체보기 (242)
      • Algorithm (123)
        • 알고리즘 이론 (8)
        • 백준 (19)
        • 프로그래머스 (83)
        • 구름 알고리즘 먼데이 챌린지 (13)
      • 빅데이터분석기사 (10)
        • 통계 (4)
        • 실기 (6)
      • KT에이블스쿨 (26)
      • FrontEnd (11)
        • React (5)
        • 기타 (6)
      • BackEnd (18)
        • Django (15)
        • Spring (3)
      • DS & ML (11)
        • Machine Learning (9)
        • Kaggle (2)
      • TIL (43)
        • python (22)
        • javascript (3)
        • 오류해결 (10)
        • 기타 (7)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 관리
    • 글쓰기
  • 링크

  • 인기 글

  • hELLO· Designed By정상우.v4.10.0
dduniverse
프로그래머스 | 연속된 수의 합 [파이썬 python]
상단으로

티스토리툴바