🗣️ 메모
모르는 메소드가 아직 많구만,,,
✏️ [배열 자르기]
문제 설명
정수 배열 numbers와 정수 num1, num2가 매개변수로 주어질 때, numbers의 num1번 째 인덱스부터 num2번째 인덱스까지 자른 정수 배열을 return 하도록 solution 함수를 완성해보세요.
제한사항
- 2 ≤ numbers의 길이 ≤ 30
- 0 ≤ numbers의 원소 ≤ 1,000
- 0 ≤num1 < num2 < numbers의 길이
입출력 예
numbers | num1 | num2 | result |
[1, 2, 3, 4, 5] | 1 | 3 | [2, 3, 4] |
[1, 3, 5] | 1 | 2 | [3, 5] |
입출력 예 설명
입출력 예 #1
- [1, 2, 3, 4, 5]의 1번째 인덱스 2부터 3번째 인덱스 4 까지 자른 [2, 3, 4]를 return 합니다.
입출력 예 #2
- [1, 3, 5]의 1번째 인덱스 3부터 2번째 인덱스 5까지 자른 [3, 5]를 return 합니다.
🔥 TRY #1 실패
👉🏻 배열을 문자열로 바꾸고 대괄호와 콤마를 split로 뺌
👉🏻 subString으로 배열 자르기
👉🏻 대괄호와 콤마를 join으로 다시 연결시킨 후 문자열을 배열로 바꾸기
import java.util.Arrays;
class Solution {
public int[] solution(int[] numbers, int num1, int num2) {
int[] answer = new int[numbers.length];
String numberStr = Arrays.toString(numbers);
// System.out.println(numberStr); // 잘 뽑힘
// split, subString, join을 쓰면?
numberStr.split(",");
System.out.println(numberStr);
return answer;
}
}
👉🏻 를 해 보려고 시도해 보았으나 더욱 간단한 로직이 떠오름!
🔥🎉 TRY #2 [실행 결과] - 반복문 활용하기
👉🏻 for문을 num1부터 num2까지 돌리자
👉🏻 새로운 배열의 길이는 num2-num1+1
import java.util.Arrays;
class Solution {
public int[] solution(int[] numbers, int num1, int num2) {
int[] answer = new int[num2-num1+1];
for(int i = num1, j = 0; i <= num2; i++, j++) {
answer[j] = numbers[i];
}
return answer;
}
}
⭐️ 다른 풀이 - Arrays.copyOfRange()
👉🏻 배열을 복사하는 메소드로 복사 시작 위치와 끝 위치를 지정할 수 있음
👉🏻 단, 시작 위치는 포함이며 끝 위치는 포함하지 않음
import java.util.Arrays;
class Solution {
public int[] solution(int[] numbers, int num1, int num2) {
int[] answer = new int[num2-num1+1];
answer = Arrays.copyOfRange(numbers, num1, num2+1);
return answer;
}
}
출처: 프로그래머스 코딩 테스트 연습,https://school.programmers.co.kr/learn/challenges