프로그래머스 : n개 간격의 원소들

Digeut·2024년 3월 20일
0

프로그래머스

목록 보기
143/164

❔문제설명

정수 리스트 num_list와 정수 n이 주어질 때, num_list의 첫 번째 원소부터 마지막 원소까지 n개 간격으로 저장되어있는 원소들을 차례로 담은 리스트를 return하도록 solution 함수를 완성해주세요.

🤔아이디어

예제를 보니까 n의 배수가 되는 위치의 배열만 담기게 하면 될거같은데 그럼 answer의 크기를 num_list를 통해서 크기를 구한다음 n의 배수가 되는 위치의 값을 담으면 되지 않을까?

❌틀린코드

class Solution {
    public int[] solution(int[] num_list, int n) {
        int nums = num_list.length % n ;
        int[] answer = new int[nums];
        for(int i = 0 ; i < nums ; i ++){
            answer[i] = num_list[n*i];
        }
        return answer;
    }
}

🙄오류


짝수의 길이를 가지는 num_list를 2로 나눈경우에 배열의 크기가 0으로 만들어버렸다...! 0인 경우에는 1로 지정되게 해줘야겠다.

❌틀린코드 2

class Solution {
    public int[] solution(int[] num_list, int n) {
        int nums = num_list.length % n ;
        if(nums == 0){
            nums = num_list.length / n ;
        }
        int[] answer = new int[nums];
        for(int i = 0 ; i < nums ; i ++){
            answer[i] = num_list[n*i];
        }
        return answer;
    }
}

🙄오류2


어디가 문제일까...
그냥 answer을 List형태로 바꿔서 담는방식으로 바꿀까?

💡코드풀이

import java.util.*;

class Solution {
    public ⭐List solution(int[] num_list, int n) {
        List<Integer> answer = new ArrayList<>();
        for(int i = 0 ; i < num_list.length ; i += n){
            answer.add(num_list[i]);
        }
        return answer;
    }
}

List형태로 담은 다음 메서드의 반환형태 자체도 List형으로 바꿔서 풀었다. 기존의 반환형태를 건드리지 않고 하는 방법은 어떻게 해야할까...

class Solution {
    public int[] solution(int[] num_list, int n) {
        int[] answer;
        if (num_list.length % n == 0) {
            answer = new int[num_list.length / n];
        } else {
            answer = new int[num_list.length / n + 1]; 
            //홀수인경우 1개의 크기를 더 키움
        }
        
        int index = 0;
        
        for (int i = 0; i < num_list.length; i+=n) {
            answer[index++] = num_list[i];
        }
        
        return answer;
    }
}

자꾸 %를 통해서는 값의 크기의 변동이 커서 몫에서 1을 더하는 방식으로 배열의 크기를 지정하는 방향으로 바꾸었다.
그리고 index를 따로 지정해주었는데 지금 배열의 값자체를 n의 배수에 해당하는 인덱스의 값을 answer에 지정해주어야 하는데, 이렇게 되면 answer과 num_list의 인덱스 증가가 서로 다르게 된다. 그렇기 때문에 answer의 index를 0으로 지정하고 한번 반복문이 돌아갈때마다 증가되는 형태로 지정해주기 위해서 따로 index를 지정해주게 되었다.

profile
개발자가 될 거야!

0개의 댓글