프로그래머스 Day12 리스트(배열)
리스트 자르기
💫문제 설명💫
정수 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
💫입출력 ex💫
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] |
문제풀이
import java.util.*;
class Solution {
public int[] solution(int n, int[] slicer, int[] num_list) {
int a = slicer[0];
int b = slicer[1];
int c = slicer[2];
List<Integer> result = new ArrayList<>();
switch (n) {
case 1:
for (int i = 0; i <= b; i++) {
result.add(num_list[i]);
}
break;
case 2:
for (int i = a; i < num_list.length; i++) {
result.add(num_list[i]);
}
break;
case 3:
for (int i = a; i <= b; i++) {
result.add(num_list[i]);
}
break;
case 4:
for (int i = a; i <= b; i += c) {
result.add(num_list[i]);
}
break;
}
int[] answer = new int[result.size()];
for (int i = 0; i < result.size(); i++) {
answer[i] = result.get(i);
}
return answer;
}
}
첫 번째로 나오는 음수
💫문제 설명💫
정수 리스트 num_list가 주어질 때,
첫 번째로 나오는 음수의 인덱스를 return하도록 solution 함수를 완성해주세요. 음수가 없다면 -1을 return합니다.
💫제한사항💫
5 ≤ num_list의 길이 ≤ 100
-10 ≤ num_list의 원소 ≤ 100
💫입출력 ex💫
num_list | result |
---|---|
[12, 4, 15, 46, 38, -2, 15] | 5 |
[13, 22, 53, 24, 15, 6] | -1 |
문제풀이
class Solution {
public int solution(int[] num_list) {
int answer = -1;
for (int i = 0; i < num_list.length; i++) {
if (num_list[i] < 0) {
answer = i;
break;
}
}
return answer;
}
}
배열 만들기 3
💫문제 설명💫
정수 배열 arr와 2개의 구간이 담긴 배열 intervals가 주어집니다.
intervals는 항상 [[a1, b1], [a2, b2]]의 꼴로 주어지며 각 구간은 닫힌 구간입니다.
닫힌 구간은 양 끝값과 그 사이의 값을 모두 포함하는 구간을 의미합니다.
이때 배열 arr의 첫 번째 구간에 해당하는 배열과 두 번째 구간에 해당하는 배열을 앞뒤로 붙여 새로운 배열을 만들어 return 하는 solution 함수를 완성해 주세요.
💫제한사항💫
1 ≤ arr의 길이 ≤ 100,000
1 ≤ arr의 원소 < 100
1 ≤ a1 ≤ b1 < arr의 길이
1 ≤ a2 ≤ b2 < arr의 길이
💫입출력 ex💫
arr | intervals | result |
---|---|---|
[1, 2, 3, 4, 5] | [[1, 3], [0, 4]] | [2, 3, 4, 1, 2, 3, 4, 5] |
문제풀이
import java.util.*;
class Solution {
public int[] solution(int[] arr, int[][] intervals) {
// 결과를 담을 ArrayList 생성
List<Integer> list = new ArrayList<>();
// 첫 번째 구간에 해당하는 값들을 리스트에 추가
for (int i = intervals[0][0]; i <= intervals[0][1]; i++)
list.add(arr[i]);
// 두 번째 구간에 해당하는 값들을 리스트에 추가
for (int i = intervals[1][0]; i <= intervals[1][1]; i++)
list.add(arr[i]);
// ArrayList를 int 배열로 변환하여 반환
return list.stream().mapToInt(Integer::intValue).toArray();
}
}
2의 영역
💫문제 설명💫
정수 배열 arr가 주어집니다.
배열 안의 2가 모두 포함된 가장 작은 연속된 부분 배열을 return 하는 solution 함수를 완성해 주세요.
단, arr에 2가 없는 경우 [-1]을 return 합니다.
💫제한사항💫
1 ≤ arr의 길이 ≤ 100,000
1 ≤ arr의 원소 ≤ 10
💫입출력 ex💫
arr | result |
---|---|
[1, 2, 1, 4, 5, 2, 9] | [2, 1, 4, 5, 2] |
[1, 2, 1] | [2] |
[1, 1, 1] | [-1] |
[1, 2, 1, 2, 1, 10, 2, 1] | [2, 1, 2, 1, 10, 2] |
문제풀이
import java.util.*;
class Solution {
public int[] solution(int[] arr) {
int startIndex = -1; // 2를 처음 만난 인덱스
int endIndex = -1; // 2를 마지막으로 만난 인덱스
for (int i = 0; i < arr.length; i++) {
if (arr[i] == 2) {
if (startIndex == -1) {
startIndex = i;
}
endIndex = i;
}
}
if (startIndex != -1 && endIndex != -1) {
// 2를 모두 포함하는 가장 작은 연속된 부분 배열을 배열로 반환
return Arrays.copyOfRange(arr, startIndex, endIndex + 1);
}
return new int[]{-1}; // 2를 포함하는 부분 배열이 없는 경우 [-1]을 반환
}
}
배열 조각하기
💫문제 설명💫
정수 배열 arr와 query가 주어집니다.
query를 순회하면서 다음 작업을 반복합니다.
짝수 인덱스에서는 arr에서 query[i]번 인덱스를 제외하고 배열의 query[i]번 인덱스 뒷부분을 잘라서 버립니다.
홀수 인덱스에서는 arr에서 query[i]번 인덱스는 제외하고 배열의 query[i]번 인덱스 앞부분을 잘라서 버립니다.
위 작업을 마친 후 남은 arr의 부분 배열을 return 하는 solution 함수를 완성해 주세요.
💫제한사항💫
5 ≤ arr의 길이 ≤ 100,000
0 ≤ arr의 원소 ≤ 100
1 ≤ query의 길이 < min(50, arr의 길이 / 2)
query의 각 원소는 0보다 크거나 같고 남아있는 arr의 길이 보다 작습니다.
💫입출력 ex💫
arr | query | result |
---|---|---|
[0, 1, 2, 3, 4, 5] | [4, 1, 2] | [1, 2, 3] |
문제풀이
import java.util.*;
class Solution {
public int[] solution(int[] arr, int[] query) {
for(int i=0; i < query.length; i++) {
if (i%2 == 0) {
arr = Arrays.copyOfRange(arr, 0, query[i]+1);
} else {
arr = Arrays.copyOfRange(arr, query[i], arr.length);
}
}
return arr;
}
}
Leave a comment