※ 본 포스팅은 프로그래머스에 있는 연습문제 풀었던 내역을 아카이빙하기 위해 작성했습니다.

작성자의 공부를 목적으로 작성된 포스팅입니다.

이 포스팅은 방법을 제시한다기보다 제가 어떤 어려움을 겪었는지를 기록하는 목적으로 작성되었습니다.

 

 

class Solution {
    public int[] solution(int n) {
        int count = 0;
        for(int i = 1 ;i<=n;i++){
            if(n%i==0) count++;
        }
        int[] answer = new int[count];
        // 현재까지 완료한 것, answer를 약수의 갯수만큼 배열을 만들어서 초기화 했다.
        // 할 일
        // answer의 각 항에 약수를 최소값부터 차례차례대로 대입한다.
        // 예를 들자면 answer[0] 에는 1번째 약수인 1을
        // answer[1] 에는 2번째 약수인 2를
        // answer[2] 에는 3번째 약수인 3을
        // answer[3] 에는 4번째 약수인 4를
        // ...
        // answer[count-1] 에는 count 번째 약수인 24를
        for (int i=0; i<count; i++){
            for ( int j = 1; j <= n; j++){
                if(n%j==0){
                    answer[i]=j;
                }
            }
        }

        
        return answer;
    }
}

간결한 코드라고 생각했었는데

정답이 1,1,1,1,1,1,1 혹은 24,24,24,24,24,24

이렇게밖에 출력이 안되어서 무엇이 문제인지를 테스트하다가

for (int i=0; i<count; i++){
            for ( int j = 1; j <= n; j++){
                if(n%j==0){
                    answer[i]=j;
                    i++; // 아 부분을 추가했습니다.
                }
            }
        }

 

이렇게 강제적으로 i++를 해주니 제대로 빠져나와서 1,2,3,4,6 이런 식으로 연산이 되는 모습을 확인할 수 있었다.

이 경우에서는 break나 continue를 사용해도 1,1,1,1,1,1,1 혹은 24,24,24,24,24,24 리턴이 되어서 상당히 곤란했었다.

break를 사용해서 가장 가까운 반복문이었던 j 를 빠져나오고 i가 진행되는 모습을 상상했었지만 잘 안됐었다.

좀 더 확실하게 공부해야할 내용들이 많다....

+ Recent posts