본문 바로가기
코딩테스트/프로그래머스 기초

[코딩테스트 Lv.0] 리스트 자르기

by 블루데이제이 2025. 3. 12.
728x90
반응형
문제 설명

정수 n과 정수 3개가 담긴 리스트 slicer 그리고 정수 여러 개가 담긴 리스트 num_list가 주어집니다. slicer에 담긴 정수를 차례대로 a, b, c라고 할 때, n에 따라 다음과 같이 num_list를 슬라이싱 하려고 합니다.

  • n = 1 : num_list의 0번 인덱스부터 b번 인덱스까지
  • n = 2 : num_list의 a번 인덱스부터 마지막 인덱스까지
  • n = 3 : num_list의 a번 인덱스부터 b번 인덱스까지
  • n = 4 : num_list의 a번 인덱스부터 b번 인덱스까지 c 간격으로

올바르게 슬라이싱한 리스트를 return하도록 solution 함수를 완성해주세요.

제한사항
● n 은 1, 2, 3, 4 중 하나입니다.
● slicer의 길이 = 3
● slicer에 담긴 정수를 차례대로 a, b, c라고 할 때
    ○ 0 ≤ a ≤ b ≤ num_list의 길이 - 1
    ○ 1 ≤ c ≤ 3
● 5 ≤ num_list의 길이 ≤ 30
● 0 ≤ num_list의 원소 ≤ 100
입출력 예
n	slicer		num_list			result
3	[1, 5, 2]	[1, 2, 3, 4, 5, 6, 7, 8, 9]	[2, 3, 4, 5, 6]
4	[1, 5, 2]	[1, 2, 3, 4, 5, 6, 7, 8, 9]	[2, 4, 6]
입출력 설명
입출력 예 #1
[1, 2, 3, 4, 5, 6, 7, 8, 9]에서 1번 인덱스부터 5번 인덱스까지 자른 리스트는 [2, 3, 4, 5, 6]입니다.

입출력 예 #2
[1, 2, 3, 4, 5, 6, 7, 8, 9]에서 1번 인덱스부터 5번 인덱스까지 2개 간격으로 자른 리스트는 [2, 4, 6]입니다.

내 풀이
Java
import java.util.*;
class Solution {
    public int[] solution(int n, int[] slicer, int[] num_list) {
        int[] answer = null;
        ArrayList<Integer> arr = new ArrayList<>();
		int a = slicer[0];
		int b = slicer[1];
		int c = slicer[2];
		
		switch(n) {
		case 1:
		
			for(int i = 0; i <= b; i++) {
		        arr.add(num_list[i]);
			}
			break;
		case 2:
			
			for(int i = a; i < num_list.length; i++) {
			    arr.add(num_list[i]);
			}
			break;
		case 3:
			
			for(int i = a; i <= b; i++ ) {
			    arr.add(num_list[i]);
			}
			break;
		case 4:
			
			for(int i = a; i <= b; i += c) {
			    arr.add(num_list[i]);
			}
			break;
		}
        
        answer = arr.stream().mapToInt(Integer::intValue).toArray();
        
        return answer;
    }
}
C
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

// slicer_len은 배열 slicer의 길이입니다.
// num_list_len은 배열 num_list의 길이입니다.
int* solution(int n, int slicer[], size_t slicer_len, int num_list[], size_t num_list_len) {
    // return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요.
    int* answer = (int*)malloc(sizeof(int) * num_list_len);
    
    int a, b, c;
    a = slicer[0];
    b = slicer[1];
    c = slicer[2];
    int i, k;
    if(n == 1){
        for(i = 0, k = 0; i <= b; i++){
            answer[k++] = num_list[i];
        }
    }else if(n == 2){
        for(i = a, k = 0; i <= num_list_len; i++){
            answer[k++] = num_list[i];
        }
    }else if(n == 3){
        for(i = a, k = 0; i <= b; i++){
            answer[k++] = num_list[i];
        }
    }else if(n == 4){
        for(i = a, k = 0; i <= b; i+=c){
            answer[k++] = num_list[i];
        }
    }
    
    return answer;
}
Python
def solution(n, slicer, num_list):
    answer = []
    
    
    a = slicer[0]
    b = slicer[1]
    c = slicer[2]
    
    if n == 1:
        for i in num_list[:b+1]:
            answer.append(i)
    elif n == 2:
        for i in num_list[a:]:
            answer.append(i)
    elif n == 3:
        for i in num_list[a:b+1]:
            answer.append(i)
    elif n == 4:
        for i in num_list[a:b+1:c]:
            answer.append(i)
    
    return answer

https://school.programmers.co.kr/learn/courses/30/lessons/181897

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

728x90
반응형