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
반응형
'코딩테스트 > 프로그래머스 기초' 카테고리의 다른 글
[코딩테스트 Lv.0] 카운트 다운 (8) | 2025.03.13 |
---|---|
[코딩테스트 Lv.0] 가까운 1 찾기 (8) | 2025.03.12 |
[코딩테스트 Lv.0] 첫 번째로 나오는 음수 (9) | 2025.03.11 |
[코딩테스트 Lv.0] 배열 만들기 3 (6) | 2025.03.11 |
[코딩테스트 Lv.0] 2의 영역 (2) | 2025.03.10 |