일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- hackerrank
- 우분투
- 프로그래머스 파이썬
- Docker
- 프로그래머스
- Real or Not? NLP with Disaster Tweets
- SW Expert Academy
- 데이콘
- 파이썬
- 캐치카페
- 자연어처리
- PYTHON
- 더현대서울 맛집
- 편스토랑
- ubuntu
- 맥북
- 코로나19
- programmers
- ChatGPT
- AI 경진대회
- 금융문자분석경진대회
- 백준
- 편스토랑 우승상품
- gs25
- dacon
- github
- Git
- Baekjoon
- Kaggle
- leetcode
- Today
- Total
솜씨좋은장씨
[Programmers] 연속된 수의 합 (Python) 본문
코딩 1일 1문제! 오늘의 문제는 프로그래머스의 연속된 수의 합 입니다.
👨🏻💻 문제 풀이
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
'Programming > 코딩 1일 1문제' 카테고리의 다른 글
[Programmers] 컨트롤 제트 (Python) (0) | 2023.02.18 |
---|---|
[Programmers] OX퀴즈 (Python) (0) | 2023.02.16 |
[Programmers] 로그인 성공? (Python) (0) | 2023.02.14 |
[Programmers] 배열 회전시키기 (Python) (0) | 2023.02.12 |
[Programmers] 잘라서 배열로 지정하기 (Python) (0) | 2023.02.11 |