울음참고 개발공부
728x90

 

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/120821

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 


 

[ 나의 답  및 문제점 ] 

 

class Solution {
    public int[] solution(int[] num_list) {
        int[] answer = new int[num_list.length];

        for(int i = num_list.length-1; i > -1; i--){
            for(int j=0; j<num_list.length; j++){
                answer[i] = num_list[j];
                i--;
            }
        }

        return answer;
    }
}

 

 

내가 작성한 코드의 문제점

이렇게 해도 채점 결과를 통과할 수는 있지만, 좋은 코드라 할 수 없다

몇가지 문제점을 살펴보자


# 문제점 

1. 무한 루프 문제
두번째 반복문 안에서 'i--' 를 수행하며 무한 루프에 빠질 가능성이 있다.
내부 반복문에서  i를 감소시키면서 외부 반복문의 조건 '(i > -1)'을 항상 만족시키게 되므로 무한히 반복하게 된다

2. 배열 인덱스 문제
내부 반복문에서 'answer[i] = num_list[j];' 문장을 실행하는데,
'i'의 값은 외부 반복문에서 감소되기 때문에 배열 인덱스가  음수가 될 수 있어 이로 인해 의도하지 않은 동작이 발생할 수 있다

3. 불필요한 반복
두 번째 반복문을 사용하여 'num_list' 배열의 값을 'answer' 배열에 복사하는 것은 불필요한 작업이다.
역순으로 저장하려는 목적을 달성시키기 위해 단순히 인덱스를 조정하는 것으로 충분하다

 

 

 

 

[ 더욱 간결한 답 ( 클린코드 ) ]

 

class Solution {
    public int[] solution(int[] num_list) {
        int[] answer = new int[num_list.length];

        for (int i = 0; i < num_list.length; i++) {
            answer[i] = num_list[num_list.length - i - 1];
        }

        return answer;
    }
}

 

 

# 코드 효율성

1. 시간 복잡도
반복문을 한번만 사용하기 때문에 시간복잡도가 줄어들어 코드를 처리하는데 더 적은 시간이 소요된다. 

2. 공간 복잡도
주어진 배열의 길이만큼 공간을 추가로 사용하므로 주어진 코드의 공간복잡도 또한 줄어든다. 

 

 

 

 

 

 

 

 

 

728x90
profile

울음참고 개발공부

@메각이

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!