[문제 설명]
정수 리스트 num_list와 정수 n이 주어질 때, n 번째 원소부터 마지막 원소까지의 모든 원소를 담은 리스트를 return하도록 solution 함수를 완성해주세요.
[입출력 예]
num_list | n | result |
[2, 1, 6] | 3 | [6] |
[5, 2, 1, 7, 5] | 2 | [2, 1, 7, 5] |
[차근 차근 생각해보기]
- answer의 배열의 길이를 num_list의 길이에서 n을 빼고 +1 한 길이로 만들어준다.
- 배열의 인덱스는 0부터 시작하기 때문에 n이 3일 경우 마지막 원소가 나오려면 num_list의 길이에서 n을 빼고 +1을 해주어야한다.
- answer의 길이 만큼 돌면서 answer의 i번째에 num_list의 (n - 1) + i번째 원소를 넣어준다.
- answer를 return 해준다.
[코드]
<수정전>
import java.util.Arrays;
class Solution {
public int[] solution(int[] num_list, int n) {
int[] answer = Arrays.copyOfRange(num_list, n - 1, num_list.length);
return answer;
}
}
<수정후>
class Solution {
public int[] solution(int[] num_list, int n) {
int[] answer = new int[(num_list.length - n) + 1];
for(int i = 0; i < answer.length; i++){
answer[i] = num_list[(n - 1)+ i];
}
return answer;
}
}
[반성할 점]
아무리 생각을 해보아도 어떻게 n의 원소를 넣어야할지 생각이 안나 검색해본 결과 Arrays.copyOfRange()라는 메소드를사용하면 배열을 복사하여 넣어줄 수 있다고 하였다.
사용법은 Arrays.copyOfRange(원본배열, 복사할 시작 인덱스, 복사할 끝 인덱스) 와 같이 사용 하면 됐고 메소드 하나로 간단하게 풀리는 문제였다.
하지만 나는 아직 메소드 사용보다는 생각하는 사고를 기르고 싶어서 반복문을 이용하여 풀어보고 싶었다. 먼저 answer배열의 길이를 어떻게 해주어야 할지 고민했고 고민 결과 배열의 인덱스는 0부터 시작하기 때문에 n이 3일 경우 마지막 원소가 나오려면 num_list의 길이에서 n을 빼고 +1을 해주면 조건에 맞게 배열의 길이가 만들어졌다.
하지만 answer배열에 조건 대로 어떻게 넣어야할지 막막했는데 길이가 5인 배열에서 n이 2일 때 총 4개의 원소가 들어가야한다. n이 2라는 것은 배열에서 1번째를 의미하고 n이 3일 경우 배열의 2번째를 의미하기 때문에 1, 2, 3, 4 번째의 원소가 들어가야 했다.
이 규칙을 찾고나니 먼저 n에서1을 빼주고 i만큼 더해주면 내가 원하는 위치의 원소를 넣을 수 있었다.
조금만 더 규칙을 찾고 나면 풀 수 있었던 문제 같다..!!
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] - 뒤에서 5등 위로 (0) | 2023.06.27 |
---|---|
[프로그래머스] - 배열 만들기 1 (0) | 2023.06.22 |
[프로그래머스] - 글자 이어 붙여 문자열 만들기 (0) | 2023.06.19 |
[프로그래머스] - 카운트 업 (0) | 2023.06.14 |
[프로그래머스] - 원소들의 곱과 합 (0) | 2023.06.12 |