코딩테스트 공부/프로그래머스

[Coding Test : Java] Lv.0 : 배열 두 배 만들기

규글 2023. 3. 15. 01:26

문제 상황은 다음과 같다.[각주:1]


 정수 배열 numbers가 매개변수로 주어집니다. numbers의 각 원소에 두배한 원소를 가진 배열을 return하도록 solution 함수를 완성해주세요.


코드

class Solution {
    public int[] solution(int[] numbers) {
        for(int i=0; i<numbers.length; i++){
            numbers[i] *= 2;
        }
        
        int[] answer = numbers;
        
        return answer;
    }
}

 사실 advanced for loop를 활용하고자 했다. 기본적인 for loop의 형태보다 단순하고, 쓰기도 편리하다. 하지만 단점이 있는데 시작과 끝을 지정할 수 없는 것과 data를 변경할 수 없다는 것이다. 지정할 수 없는 이유는 compiler 최적화를 통해서 iterator를 기반으로 동작하기 때문이라고 한다.

 

for(int tmp : array){
    System.out.println(tmp);
} 

(작성한 코드)
---------------------------------
(Compiler 최적화)

Iterator iter = array.iterator();
while(iter.hasNext()){
    int tmp = (int) iter.next();
    System.out.println(tmp);
}

 예를 들어 위 예시와 같이 작성한 코드가 있다면, 최적화 된 코드는 Iterator를 활용한 것이 되는 것이다. 따라서 시작점과 끝점을 지정할 수가 없는 것이다.

 

 데이터를 변경할 수 없는 이유는 요소를 객체의 복사본으로 처리하기 때문이라고 한다. 하지만 얕은 복사를 하기 때문에, 요소 자체를 변경할 수는 없으나, 요소 내의 data를 변경하는 것은 가능하다고 한다.[각주:2]

 

 그래서 필자는 기본 for loop의 형태를 활용했다.

 

Footnote