< 풀이 >
class Solution {
public int solution(int n) {
int answer = 0;
for(int i=1;i<=n/2;i++){
int sum=i;
for(int j=i+1;j<n;j++){
sum+=j;
if(sum==n){
answer++;
break;
}
if(sum>n)
break;
}
}
answer=answer+1; //자기 자신일 경우까지 포함해서 1 더해주기
return answer;
}
}
✏️ 풀이 방법
* 연속된 자연수로 n을 표현하는 방법의 수
n=15일 경우에 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 라면, 15의 절반인 7이 넘어가는 이후인
8부터는 연속된 합이 15를 넘어갈 수 밖에 없으므로, 반복문 i의 조건식을 i<=n/2로 설정하였다.
- 반복문 ① 에서 i를 1부터 n/2까지 반복 ( sum=i로 설정 , i는 연속된 합의 시작점 )
: 반복문 ② 는 i+1부터 n까지 반복
-> sum이 n과 같아지면 answer을 증가 후 반복문② 종료, 반복문 ①의 다음 i 값으로 넘어감
-> sum이 n보다 커지면 반복문② 종료, 반복문 ①의 다음 i 값으로 넘어감
- 자기 자신일 경우를 포함해야 하므로 answer에 1을 더한 후 return 해준다.
✍🏻 느낀점
이번 문제는 다른 사람들 풀이를 봤을 때도 다 비슷하게 푼 것 같다. 이러한 비슷한 문제를 백준에서 푼 적이
있는 것 같은데, 처음에는 어? 이거 어떻게 풀었더라? 했지만 금방 풀이 방법이 생각나서 비교적 쉽게 문제를
해결할 수 있었다. "연속된 자연수" 라는 것에 초점을 맞추면 쉽게 풀 수 있는 문제 같다. 항상 느끼는 거지만,
문제를 꼼꼼히 정확하게 읽는게 코테에서 가장 중요한 것 같다. 파이팅,,
'코딩테스트 > Programmers' 카테고리의 다른 글
[JAVA] 피보나치 수 (0) | 2024.04.22 |
---|---|
[JAVA] 다음 큰 숫자 (0) | 2024.04.22 |
[JAVA] 이진 변환 반복하기 (1) | 2024.04.18 |
[JAVA] JadenCase 문자열 만들기 (1) | 2024.04.18 |
[JAVA] 최솟값 만들기 (0) | 2024.04.17 |