| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- 그래프 탐색
- Python
- Knowledge graph
- 동적 프로그래밍
- Recommendation
- DP
- 백준
- 정렬
- bfs
- isdigit()
- isnumeric()
- 우선순위 큐
- Dynamic Programming
- 알고리즘
- 프로그래머스
- LSTM
- 그래프
- find()
- isalnum()
- 코테
- Algorithm
- isalpha()
- Stack
- 파이썬
- knowledge
- 자료구조
- 추천시스템
- explainable recommendation
- kg
- Deque
Archives
- Today
- Total
데린이 고인물되기
[TIL] 250911 - 프로그래머스 숫자의 표현 본문
반응형
문제
Finn은 요즘 수학공부에 빠져 있습니다. 수학 공부를 하던 Finn은 자연수 n을 연속한 자연수들로 표현 하는 방법이 여러개라는 사실을 알게 되었습니다. 예를들어 15는 다음과 같이 4가지로 표현 할 수 있습니다.
- 1 + 2 + 3 + 4 + 5 = 15
- 4 + 5 + 6 = 15
- 7 + 8 = 15
- 15 = 15
자연수 n이 매개변수로 주어질 때, 연속된 자연수들로 n을 표현하는 방법의 수를 return하는 solution를 완성해주세요.
제한사항- n은 10,000 이하의 자연수 입니다.
입출력 예
| n | result |
| 15 | 4 |
입출력 예#1
문제의 예시와 같습니다.
나의 답
# 짝수개로 나눠질 수 있으려면 -> 1 2 3 4 5 6 -> 21 에서 1,6/2,5/3,4 쌍으로 합이 7이니까 7*3 = 21. 즉, 짝수로 k개로 수가 나뉠 수 있으려면 k/2 만큼의 나머지가 남아야함. 그리고 각 쌍 더한게 k이상이어야함.
# 홀수개로 이 수가 나눠질 수 있으려면 -> 1 + 2 + 3 + 4 + 5 = 15에서 중간에 있는 값 3 기준으로 양 옆 2,4/ 1,5의 합이 3의 2배임. 즉, 합해서 나오는 수는 중간에 있는 값 a 기준으로 a(1+ 홀수개//2). 걍 n이 그 홀수갯수(k)로 나눠떨어지면 되는거임. 그리고 나누어 떨어진 와중에 k개로 나누어 떨어졌다면 n/k*2 가 k 보다 커야함.
def solution(n):
answer = 0
# n//2 까지 탐색
for k in range(1, n//2+2):
if k % 2 == 0 : # 항의 수가 짝수
value = n/k # 값
remain = n%k # 나머지
if remain == k/2 and value*2 >= k:
answer += 1
else: # 항의 수가 홀수
if n % k == 0 and n/k*2 > k: # 나누어 떨어지면
answer += 1
return answer
반응형
'Algorithm > 문제' 카테고리의 다른 글
| [TIL] 250916 프로그래머스 - 주차요금계산 (0) | 2025.09.16 |
|---|---|
| [TIL] 250916 - 프로그래머스 뉴스 클러스터링 (1) | 2025.09.16 |
| [TIL] 250630 프로그래머스 - 더 맵게 (0) | 2025.06.30 |
| [TIL] 250629 프로그래머스 - 큰 수 만들기 (0) | 2025.06.29 |
| [TIL] 250628 프로그래머스 - 전화번호 목록 (0) | 2025.06.28 |