
내가 생각했을때 문제에서 원하는부분
정수 배열 arr와 2개의 구간이 담긴 배열 intervals가 주어집니다.
intervals는 항상 [[a1, b1], [a2, b2]]의 꼴로 주어지며 각 구간은 닫힌 구간입니다.
닫힌 구간은 양 끝값과 그 사이의 값을 모두 포함하는 구간을 의미합니다.
이때 배열 arr의 첫 번째 구간에 해당하는 배열과 두 번째 구간에 해당하는 배열을 앞뒤로 붙여 새로운 배열을 만들어 return 하는 solution 함수를 완성해 주세요.
내가 이 문제를 보고 생각해본 부분
solution 메서드에서 첫 번째 구간과 두 번째 구간의 시작과 끝 인덱스를 꺼내온다.
각 구간의 길이를 닫힌 구간 길이 계산법인 (끝 인덱스 - 시작 인덱스 + 1)로 구한다.
두 구간 길이 합에 해당하는 크기의 새 배열 answer를 초기화한다.
첫 번째 구간 범위에 해당하는 부분을 arr 배열에서 복사해 answer 배열의 앞쪽에 채운다.
두 번째 구간 범위에 해당하는 부분을 arr 배열에서 복사해 answer 배열의 뒤쪽에 채운다.
최종 완성된 answer 배열을 반환한다.
main 메서드는 위 solution 메서드를 테스트하기 위해 입력 배열과 구간을 선언하고 solution를 호출해 결과를 콘솔에 출력한다. 예상 출력값은 [2, 3, 4, 1, 2, 3, 4, 5]이다.
코드로 구현
class Solution {
public int[] solution(int[] arr, int[][] intervals) {
int a1 = intervals[0][0];
int b1 = intervals[0][1];
int a2 = intervals[1][0];
int b2 = intervals[1][1];
int len1 = b1 - a1 + 1;
int len2 = b2 - a2 + 1;
int[] answer = new int[len1 + len2];
for (int i = 0; i < len1; i++) {
answer[i] = arr[a1 + i];
}
for (int i = 0; i < len2; i++) {
answer[len1 + i] = arr[a2 + i];
}
return answer;
}
}
프로그래머스 코드
package programmers;
import java.util.Arrays;
// 프로그래머스 배열 만들기 3
public class Main50 {
// 배열 만들기 3 문제 풀이 메서드
public int[] solution(int[] arr, int[][] intervals) {
int a1 = intervals[0][0];
int b1 = intervals[0][1];
int a2 = intervals[1][0];
int b2 = intervals[1][1];
int len1 = b1 - a1 + 1;
int len2 = b2 - a2 + 1;
int[] answer = new int[len1 + len2];
for (int i = 0; i < len1; i++) {
answer[i] = arr[a1 + i];
}
for (int i = 0; i < len2; i++) {
answer[len1 + i] = arr[a2 + i];
}
return answer;
}
public static void main(String[] args) {
Main50 main50 = new Main50();
int[] arr = {1, 2, 3, 4, 5};
int[][] intervals = {{1, 3}, {0, 4}};
int[] result = main50.solution(arr, intervals);
System.out.println(Arrays.toString(result));
// 예상 출력: [2, 3, 4, 1, 2, 3, 4, 5]
}
}
위에 있는 코드를 변경한 코드
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.