코테연습/프로그래머스
코딩테스트입문 > 배열 뒤집기 Java
메각이
2023. 8. 30. 10:59
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