기록하는 공부
[Programmers] 120833 배열 자르기(Arrays.copyofRange()) 본문
728x90
반응형
출처
https://school.programmers.co.kr/learn/courses/30/lessons/120833
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
정수 배열 numbers와 정수 num1, num2가 매개변수로 주어질 때, numbers의 num1번째 인덱스부터 num2번째 인덱스까지 자른 정수 배열을 return 하도록 solution 함수를 완성해보세요.
제한사항
- 2 ≤ numbers의 길이 ≤ 30
- 0 ≤ numbers의 원소 ≤ 1,000
- 0 ≤num1 < num2 < numbers의 길이
입출력 예
입출력 예 #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 합니다.
풀이1(Arrays.copyofRange() 사용)
import java.util.*;
class Solution {
public int[] solution(int[] numbers, int num1, int num2) {
int[] answer = {};
answer = Arrays.copyOfRange(numbers, num1, (num2 + 1));
return answer;
}
}
Arrays.copyofRange() 메소드를 사용해 해결했다.
첫번째 인자에 배열을 넣고, 두번째 인자에는 시작 값, 마지막 인자에는 마지막 값의 +1을 한다.
그러면 시작 값에 입력한 num1의 값인 인덱스부터 num2+1의 값의 인덱스에 해당하는 배열의 값이
answer 배열에 들어가게 되고 이를 반환하면 풀리는 문제이다.
풀이2(for문을 사용하기)
class Solution {
public int[] solution(int[] numbers, int num1, int num2) {
int[] answer = new int [num2-num1+1];
int index = 0;
for(int i = num1; i<=num2; i++) {
answer[index] = numbers[i];
index++;
}
return answer;
}
}
내가 풀다가 시도했던 풀이와 비슷하지만 성공한 풀이코드이다.
이중 for문이 아닌 index를 0으로 초기화하고 ++연산을 수행하면서 answer배열에 값을 채워넣는다.
하나배워갑니당..
내가 풀다가 실패한 풀이
class Solution {
public int[] solution(int[] numbers, int num1, int num2) {
int[] answer = new int [num2-num1+1];
for(int j=0; j<answer.length; j++) {
for(int i=num1; i<=num2; i++) {
answer[j] = numbers[i];
}
}
return answer;
}
}
for문을 두번 사용해서 해결해보려고 했다.
answer에 num1부터 num2까지의 길이만큼을 주고
for문의 j에 그 길이만큼 반복하면서 numbers의 인덱스 i=num1부터 num2까지의 값을 answer에 넣으려고 했는데
오류가 발생했다.
728x90
반응형
'Language > Java' 카테고리의 다른 글
[백준 11382] 런타임 에러 발생 원인 (0) | 2023.03.27 |
---|---|
Java에서 문자열을 입력받고 대문자/소문자로 변환하여 출력하기(toUpperCase(), toLowerCase()) (0) | 2023.02.21 |
Java에서 정수의 최대값이나 최소값 출력하기(Integer.MAX_VALUE, Integer.MIN_VALUE) (0) | 2023.02.19 |