728x90
https://school.programmers.co.kr/learn/courses/30/lessons/120821
[ 나의 답 및 문제점 ]
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
'코테연습 > 프로그래머스' 카테고리의 다른 글
코딩테스트입문 > 직각삼각형 출력하기 Java (0) | 2023.09.05 |
---|---|
코딩테스트입문 > 피자 나눠 먹기(3) Java (0) | 2023.08.30 |
코딩 기초 트레이닝 > 접미사인지 확인하기 Java #contains #Arrays.asList() (0) | 2023.08.30 |
코딩 기초 트레이닝 > 접미사 배열 Java (0) | 2023.08.30 |
코딩테스트입문 > 로그인 성공? - Java (0) | 2023.08.29 |