1 minute read

배열 두배 만들기

문제 설명

정수 배열 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