정수 배열 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
'코딩테스트 공부 > 프로그래머스' 카테고리의 다른 글
[Coding Test : Java] Lv.0 : 문자열 뒤집기 (0) | 2023.03.16 |
---|---|
[Coding Test : Java] Lv.0 : 최빈값 구하기 (0) | 2023.03.16 |
[Coding Test : Java] Lv.0 : 중앙값 (0) | 2023.03.15 |
[Coding Test : Java] Lv.0 : 분수의 덧셈 (0) | 2023.03.15 |
[Coding Test : Java] Lv.0 : 두 수의 나눗셈 (0) | 2023.03.14 |
댓글