[문제 설명]
정수 리스트 num_list와 정수 n이 주어질 때, num_list의 첫 번째 원소부터 마지막 원소까지 n개 간격으로 저장되어있는 원소들을 차례로 담은 리스트를 return하도록 solution 함수를 완성해주세요.
[입출력 예]
num_list | n | result |
[4, 2, 6, 1, 7, 6] | 2 | [4, 6, 7] |
[4, 2, 6, 1, 7, 6] | 4 | [4, 7] |
[차근 차근 생각해보기]
- 이름이 arr인 ArrayList를 만든다.
- num_list의 길이 만큼 돌면서 i가 n의 배수이면 arr에 num_list의 i번째를 넣어준다.
- arr의 사이즈만큼의 answer 배열을 만들어 준 후
- arr의 size만큼 돌면서 answer배열에 arr의 i번째 요소를 Integer에서 int로 바꾸어 넣어준다.
- answer를 리턴 해준다.
[결과]
<수정 전>
class Solution {
public int[] solution(int[] num_list, int n) {
int[] answer = new int[num_list.length/n];
for(int i = 0; i < num_list.length; i++){
if(i%n == 0){
answer[i/n] = num_list[i];
}
}
return answer;
}
}
<수정 후>
import java.util.ArrayList;
class Solution {
public int[] solution(int[] num_list, int n) {
ArrayList<Integer> arr = new ArrayList<>();
for(int i = 0; i < num_list.length; i++){
if(i%n == 0){
arr.add(num_list[i]);
}
}
int[] answer = new int[arr.size()];
for(int i = 0; i < arr.size(); i++){
answer[i] = arr.get(i).intValue();
}
return answer;
}
}
[반성할 점]
<수정 전>
answer 배열을 num_list를 n으로 나눈 길이 만큼 선언 해주었다.
n개 간격이면 n의 배수가 되어야 하기 때문에 'i가 n의 배수이면' 이라는 조건문을 넣어주었다.
answer의 i번째에 num_list의 i번째를 넣어주려 했으나
이렇게 되면 answer의 i번째에 0,1,2,3 이런 순서가 아닌 n의 배수가 들어가게 되어 오류가 났다.
생각해보니 n이 2이라면 num_list의 0, 2, 4, 6 순서로 들어갈 것이고,
num_list[0] => answer[0] / num_list[2] => answer[1] / num_list[4] => answer[2]의 방식으로 들어가야했다.
그래서 answer[i / n]를 해주면 위와 같은 방식으로 값이 들어갈 수 있었다.
<수정 후>
하지만 위의 방식은 n의 2일 경우였다. 예제인 n이 4일 경우엔 answer 배열의 길이를 num_list의 n으로 나누게 된다면
6 / 4 = 1이 되어 answer 배열의 길이는 1이 되어 오류가 났다.
그래서 answer 배열의 길이를 신경 쓰지 않고 하기 위해 ArrayList로 만들어 ArrayList에 'i가 n의 배수이면' num_list의 i번째를 넣어 주었고 배열로 바로 변환하여 return을 해주려 했다. 생각해보니 ArrayList는 Wrapper 클래스를 사용하고 있어 arr인 ArrayList를 반복문으로 돌면서 intValue()라는 메소드를 사용 하여 Integer 객체에서 int형 값을 뽑아주는 메소드를 사용하였다.
ArrayList를 사용하는 것은 내 생각이 아닌 친구의 제안이었다..ㅠㅠ 아직 저런 사고까지 하는 것은 힘든 것 같다..
그래도 ArrayList라는 힌트를 얻어 나머지는 검색하면서 잘 해결해냈다..!! 이런 저런 케이스를 경험하는 것이라고 생각하고 문제를 많이 많이 풀어보고 내 것으로 만들어야겠다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] - 원소들의 곱과 합 (0) | 2023.06.12 |
---|---|
[프로그래머스] - rny_string (0) | 2023.06.12 |
[프로그래머스] - 문자열의 뒤의 n글자 (2) | 2023.06.11 |
[프로그래머스] - n 번째 원소까지 (0) | 2023.06.10 |
[프로그래머스] - 정수 찾기 (0) | 2023.06.10 |