[programmers] 배열 만들기 3 - Java

정수 배열 arr와 2개의 구간이 담긴 배열 intervals가 주어지고, 이를 앞뒤로 붙인 새로운 배열을 만들어 반환하는 문제입니다. 배열의 길이와 구간의 범위를 확인하여 새로운 배열을 생성하는 코드를 작성해야 합니다.
Jan 11, 2024
[programmers] 배열 만들기 3 - Java

문제 설명

정수 배열 arr와 2개의 구간이 담긴 배열 intervals가 주어집니다.
intervals는 항상 [[a1, b1], [a2, b2]]의 꼴로 주어지며 각 구간은 닫힌 구간입니다. 닫힌 구간은 양 끝값과 그 사이의 값을 모두 포함하는 구간을 의미합니다.
이때 배열 arr의 첫 번째 구간에 해당하는 배열과 두 번째 구간에 해당하는 배열을 앞뒤로 붙여 새로운 배열을 만들어 return 하는 solution 함수를 완성해 주세요.

제한사항

  • 1 ≤ arr의 길이 ≤ 100,000
    • 1 ≤ arr의 원소 < 100
  • 1 ≤ a1 ≤ b1 < arr의 길이
  • 1 ≤ a2 ≤ b2 < arr의 길이

입출력 예

arr
intervals
result
[1, 2, 3, 4, 5]
[[1, 3], [0, 4]]
[2, 3, 4, 1, 2, 3, 4, 5]

입출력 예 설명

입출력 예 #1
  • 첫 번째 구간에 해당하는 배열은 [2, 3, 4] 입니다.
  • 두 번째 구간에 해당하는 배열은 [1, 2, 3, 4, 5] 입니다.
  • 따라서 이 두 배열을 앞뒤로 붙인 배열인 [2, 3, 4, 1, 2, 3, 4, 5]를 return 합니다.

solution.java

class Solution { public int[] solution(int[] arr, int[][] intervals) { int length = 0; int count = 0; for(int i=0; i<intervals.length; i++){ int[] arrIndex = intervals[i]; length += arrIndex[1] - arrIndex[0] + 1; } int[] result = new int[length]; for(int i=0; i<intervals.length; i++){ for(int j=intervals[i][0]; j<intervals[i][1]+1; j++){ result[count] = arr[j]; count++; } } return result; } }
 

핵심 키워드

  • null로 초기화된 참조 변수의 값일 저장하거나 읽으려고 할 경우 NullPointerException이 발생한다.
  • 이를 해결하기 위해서는 참조 변수가 객체를 정확히 참조하도록 해야 한다.
 

결론!

해당 문제를 풀면서 코드를 작성하다가 배열의 길이를 초기화하지 않아 NullPointerException이 발생했고, 이를 해결하기 위해 for문으로 배열을 순회해 전체 길이를 구한 뒤 길이를 초기화했다.
 
Share article

👨🏻‍💻DriedPollack's Blog