[프로그래머스]배열 두배 만들기
배열 두배 만들기
문제 설명
정수 배열 numbers가 매개변수로 주어집니다. numbers의 각 원소에 두배한 원소를 가진 배열을 return하도록 solution 함수를 완성해주세요.
제한사항
- -10,000 ≤ numbers의 원소 ≤ 10,000
- 1 ≤ numbers의 길이 ≤ 1,000
입출력 예
numbers | result |
---|---|
[1, 2, 3, 4, 5] | [2, 4, 6, 8, 10] |
[1, 2, 100, -99, 1, 2, 3] | [2, 4, 200, -198, 2, 4, 6] |
입출력 예 설명
입출력 예 #1
- [1, 2, 3, 4, 5]의 각 원소에 두배를 한 배열 [2, 4, 6, 8, 10]을 return합니다.
입출력 예 #2
- [1, 2, 100, -99, 1, 2, 3]의 각 원소에 두배를 한 배열 [2, 4, 200, -198, 2, 4, 6]을 return합니다.
나의 풀이 코드
class Solution {
public int[] solution(int[] numbers) {
int[] answer = new int[numbers.length];
for(int i=0; i<numbers.length; i++) {
answer[i] = numbers[i] * 2;
}
return answer;
}
}
배운점
class Solution {
public int[] solution(int[] numbers) {
if (numbers.length < 1 || numbers.length > 1000) {
throw new IllegalArgumentException("numbers의 길이가 1과 10,000사이의 범위를 넘습니다.");
}
for (int num : numbers) {
if (num < -10000 || num > 10000) {
throw new IllegalArgumentException("numbers의 요소중 -10,000에서 10,000사이의 범위를 넘습니다. ");
}
}
int[] answer = new int[numbers.length];
for (int i = 0; i < numbers.length; i++) {
answer[i] = numbers[i] * 2;
}
return answer;
}
}
위 코드는 예외처리를 추가한 코드이다.
예외처리를 잘 이용하면 범위를 벗어난 입력이 주어질때 시간복잡도가 개선된다. 지금껏 제한사항을 조건문을 사용하여 그안에서 알고리즘을 짰지만 이번 문제처럼 for문을 사용해야 하는경우에서 또 그랬다면 이중반복문을 써야했기 때문에 시간복잡도가 늘어날것이다.
그리고 예외처리를 할때 일반적으로 try-catch문으로 작성하는것 같다. 다음 문제부터 사용해야겠다.
import java.util.Arrays;
class Solution {
public int[] solution(int[] numbers) {
return Arrays.stream(numbers).map(i -> i * 2).toArray();
}
}
위 코드는 남이 푼 코드인데 위 코드를 보고 Arrays.stream에 대해서 알았다.
내 코드는 초기화된 정수 배열을 생성하여 각 요소를 직접 수정하고 저장했다면, 위 코드는 스트림을 활용하여 배열의 각 요소에 함수를 적용하고 변환된 값을 스트림으로 반환했다.
Leave a comment