문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/12924

제한 사항

입출력 예

풀이
class Solution {
public int solution(int n) {
int answer = 0;
int preNum = 1;
int sum = 0;
int count = 0;
for (int i = 1; i <= n; i++) {
sum += i;
if (sum > n)
while(sum > n) sum -= preNum++;
if (sum == n) {
count = i - preNum + 1;
answer++;
break;
}
}
for (int i = 2; i < count; i++) {
sum = 0;
for (int j = 1; j < i; j++) sum += j;
while (sum < n) sum += i;
if (sum == n) answer++;
}
return (count == 1) ? answer : ++answer;
}
}
후기
뭔가 단순하게 바로 이중 for문 돌렸으면 더 쉽게 풀었을 것 같은데 왜 이렇게 했을까... 하지만 이건 처음에 제일 큰 자연수 개수를 가지는 경우를 구해서 이것보다 작은 것들만 순회해서 단순히 모든 경우를 순회하는 것보다는 빠를 것 같다. 그리고 다른 사람 풀이에

이런게 있는데 왜 그런지는 모르겠다... 이런 방식이 있었다니
'코딩테스트 (프로그래머스) > Java' 카테고리의 다른 글
| [프로그래머스][JAVA][Lv. 1] 문자열 내 p와 y의 개수 (0) | 2023.08.10 |
|---|---|
| [프로그래머스][JAVA][Lv. 1] 약수의 합 (0) | 2023.08.10 |
| [프로그래머스][JAVA][Lv. 2] 이진 변환 반복하기 (0) | 2023.08.09 |
| [프로그래머스][JAVA][Lv. 2] 최솟값 만들기 (0) | 2023.08.09 |
| [프로그래머스][JAVA][Lv. 2] 최대값과 최소값 (0) | 2023.08.09 |