728x90
https://school.programmers.co.kr/learn/courses/30/lessons/12924
728x90
메모리: 52 MB, 시간: 0.54 ms
사용 알고리즘: 투 포인터
투 포인터 l
과 r
을 두고, l
부터 r
까지 수의 합을 sum
에 저장해둔다.
sum
이 n
보다 작다면 r++
을 통해 sum
값을 키워준다.
sum
이 n
보다 크다면 l++
을 통해 sum
값을 줄여준다.
sum == n
을 찾았다면 anwer++
해준다.
class Solution {
public int solution(int n) {
int answer = 0;
// 투포인터
int l = 1, r = 1;
int sum = 1; // l과 r 사이의 합
while(r <= n) {
if(sum == n) { // n을 만들 수 있는 조합 발견
answer++;
// l 포인터 이동
sum -= l;
l++;
}
else if(sum < n) { // 합이 작으면 r 포인터를 이동하여 합을 키워줌
r++;
sum += r;
}
else { // 합이 크면 l 포인터를 이동하여 합을 낮춤
sum -= l;
l++;
}
}
return answer;
}
}
728x90
'Problem Solving > Programmers' 카테고리의 다른 글
[프로그래머스, 64063] 호텔 방 배정 (java) (0) | 2024.08.08 |
---|---|
[프로그래머스, 42898] 등굣길 (java) (0) | 2024.08.08 |
[프로그래머스, 12932] 자연수 뒤집어 배열로 만들기 (java) (0) | 2024.08.07 |
[프로그래머스, 42891] 무지의 먹방 라이브 (java) (2) | 2024.08.05 |
[프로그래머스, 43163] 단어 변환 (java) (0) | 2024.08.05 |