
내가 생각했을때 문제에서 원하는부분
정수 리스트 num_list와 정수 n이 주어질 때, num_list의 첫 번째 원소부터 마지막 원소까지 n개 간격으로 저장되어있는 원소들을 차례로 담은 리스트를 return하도록 solution 함수를 완성해주세요.
내가 이 문제를 보고 생각해본 부분
solution 메서드는 입력 배열 num_list와 간격 n을 받아서, n 간격으로 원소들을 추출해 새 배열을 반환하는 기능이다.
size 변수는 결과 배열의 크기를 계산하는데, (num_list.length + n - 1) / n 연산으로 올림 처리를 하여 충분한 크기를 확보한다.
answer 배열을 할당한 뒤, 인덱스 변수 index를 0으로 초기화한다.
for 반복문은 i를 0부터 시작해서 n씩 증가시키며 num_list의 해당 원소를 answer에 차례로 복사한다.
반복이 끝나면 완성된 배열 answer를 반환한다.
main 메서드는 프로그램 실행 진입점이다.
Main57 클래스의 인스턴스를 생성한다.
두 가지 예시 배열과 간격 값을 준비한 후, solution 메서드를 호출해 결과 배열을 얻는다.
결과 배열은 arrayToString 메서드를 통해 사람이 보기 좋은 문자열 형태로 변환된다.
변환한 문자열을 System.out.println으로 출력한다.
arrayToString 메서드는 int[] 배열을 문자열로 변환하는데 사용된다.
[, ] 로 감싸고, 각 원소는 쉼표와 공백으로 구분하여 연결한다.
이를 통해 배열이 [4, 6, 7] 같은 형태로 출력된다.
코드로 구현
class Solution {
public int[] solution(int[] num_list, int n) {
int size = (num_list.length + n - 1) / n;
int[] answer = new int[size];
int index = 0;
for (int i = 0; i < num_list.length; i += n) {
answer[index++] = num_list[i];
}
return answer;
}
}
프로그래머스 코드
package programmers;
// 프로그래머스 n개 간격의 원소들
public class Main57 {
public int[] solution(int[] num_list, int n) {
int size = (num_list.length + n - 1) / n;
int[] answer = new int[size];
int index = 0;
for (int i = 0; i < num_list.length; i += n) {
answer[index++] = num_list[i];
}
return answer;
}
public static void main(String[] args) {
Main57 sol = new Main57();
int[] num_list1 = {4, 2, 6, 1, 7, 6};
int n1 = 2;
int[] result1 = sol.solution(num_list1, n1);
System.out.println(arrayToString(result1));
int[] num_list2 = {4, 2, 6, 1, 7, 6};
int n2 = 4;
int[] result2 = sol.solution(num_list2, n2);
System.out.println(arrayToString(result2));
}
private static String arrayToString(int[] arr) {
StringBuilder sb = new StringBuilder();
sb.append("[");
for (int i = 0; i < arr.length; i++) {
sb.append(arr[i]);
if (i != arr.length -1) {
sb.append(", ");
}
}
sb.append("]");
return sb.toString();
}
}
위에 있는 코드를 변경한 코드
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.