본문 바로가기

코딩테스트/Programmers

[JAVA] 숫자의 표현

< 풀이 >

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