class Solution {
public int solution(int n) {
int[] arr = new int[n + 1];
for (int i = 1; i <= n; i++) {
arr[i] = i;
}
int lt = 1;
int rt = 1;
int count = 0;
int sum = 0;
while (lt <= rt && rt <= n) {
if (sum < n) {
sum += arr[rt++];
} else if (sum > n) {
sum -= arr[lt++];
} else {
count++;
sum -= arr[lt++];
}
}
return ++count;
}
}
처음에 옛날에 풀어봤지만 못 푼 기억이 났다. 그래서 어떻게 풀까하다가, 최근에 살짝 공부해본 two-pointers & sliding window
이 기억났다. 1부터 타겟넘버(문제에선 15)까지 계속 더하면서 하나의 포인터를 계속 따라가게 두고, 더한 값이 타겟 넘버보다 크거나 같으면 lt
를 위로 올리면서 더한 값에서 빼는 식이였다. 그것이 생각나서 풀었더니 생각보다 되게 수월하게 풀었다.
[출처] : 프로그래머스 코딩테스트 숫자의표현
[출처] : 내가 앞서 공부했던 풀이