-
[프로그래머스] - 숫자의 표현Algorithm/프로그래머스 2022. 8. 8. 21:10
문제
프로그래머스 - 숫자의 표현
https://school.programmers.co.kr/learn/courses/30/lessons/12924#
문제 이해
더보기문제 설명
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에 대해 연속된 숫자의 합으로 구현될 수 있는 경우의 수를 구한다.
알고리즘
1. 이분 탐색
O(NlogN)
- 0~N까지의 총합을 각 List로 구한다.
- 각 Index에서 총합에서 N을 뺀 값이 존재하면 추가
2. 투포인터
O(N)
- 두 가지의 변수를 두어, 요구하는 값보다 작다면 오른쪽 값을 더해주고 크다면 왼쪽에 있는 값을 빼주어 구현
코드
1. 이분탐색
# Programmers-숫자의 표현 import bisect def solution(n): answer = 0 cnt = 0 datas=[] for i in range(n+1): cnt+=i datas.append(cnt) for right in range(1,n+1): target=datas[right]-n if target<0: continue if datas[bisect.bisect_left(datas,target)]==target: answer+=1 return answer
2. 투포인터
def solution(n): answer = 0 datas = [i for i in range(n+1)] left=0 current=0 for right in range(1,n+1): current+=datas[right] if current==n: answer+=1 continue while current > n : current-=datas[left] if current==n: answer+=1 left+=1 return answer
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] - 주차 요금 계산 (0) 2022.08.09 [프로그래머스] - 방문 길이 (0) 2022.08.09 [프로그래머스] - 양궁대회 (0) 2022.08.05 [프로그래머스] - 교점에 별 만들기 (0) 2022.08.04 [프로그래머스] - 멀리 뛰기 (0) 2022.08.04