https://school.programmers.co.kr/learn/courses/30/lessons/12924
홀수인 약수 구하는 문제라고 하는데 자세한 이유는 잘 모르겠고 하라는 대로 풀었다. 질문하기에는 효율성 관련해서 얘기가 좀 있던데 이상하게 나는 전부 통과는 했다.
다 풀고 난 다음 고민한 건 좀 더 경량화할 부분이 보인다는 점. 이건 결과를 초기화하지 않고 자신의 값을 총합에서 뺀 다음에 다음 숫자로 넘기면 더 효율적이지 않을까해서 조금 고쳤다.
저런 느낌이었는데 다시 보니까 간단하게 줄일 수 있어서 또 줄였다. 정확히는 쓸모없는 연산을 정리했음. 긴 설명 없이 '맨 앞에서 하나 빼고, 부족하면 맨 뒤에 하나 더한다.' 한 문장으로 요약이 가능할 것 같다. 근데 다 풀고나니 이런 풀이를 보고 '투 포인터'라고 한다. 뭔가 그런걸 배웠던거 같기도 하고...
1차
class Solution {
public int solution(int n) {
int answer = 0;
int sum = 0;
int add = 0;
for(int i = 1; i < n / 2 + 1; i++){
sum -= i - 1;
while(sum < n){
sum += i + add;
add++;
}
if(sum == n){
answer++;
}
add--;
}
return answer + 1;
}
}
2차
class Solution {
public int solution(int n) {
int answer = 0;
int sum = 0;
int add = 1;
for(int i = 1; i < n / 2 + 1; i++){
while(sum < n){
sum += add;
add++;
}
if(sum == n){
answer++;
}
sum -= i;
}
return answer + 1;
}
}