🦛 문제 설명
정수 배열 arr 가 주어집니다.
배열 안의 2가 모두 포함된 가장 작은 연속된 부분 배열을 return 하는 solution 함수를 완성해주세요.
단, arr 에 2가 없는 경우 [-1] 을 return 합니다.
🦛 제한사항
- 1 ≤ arr 의 길이 ≤ 100,000
- 1 ≤ arr 의 원소 ≤ 10
🦛 입출력 예
🦛 입출력 예
입출력 예 #1
- 2가 있는 인덱스는 1번, 5번 인덱스뿐이므로 1번부터 5번 인덱스까지의 부분 배열인 [2, 1, 4, 5, 2] 를 return 합니다.
입출력 예 #2
- 2가 한 개 뿐이므로 [2] 를 return 합니다.
입출력 예 #3
- 2가 배열에 없으므로 [-1] 을 return 합니다.
입출력 예 #4
- 2가 있는 인덱스는 1번, 3번, 6번 인덱스이므로 1번부터 6번 인덱스까지의 부분 배열인 [2, 1, 2, 1, 10, 2] 를 return 합니다.
🦛 문제 풀이
import java.util.*;
class Solution {
public int[] solution(int[] arr) {
ArrayList<Integer> arrList = new ArrayList<>();
ArrayList<Integer> tmp = new ArrayList<>();
int count = 0;
for(int i=0; i < arr.length; i++) {
if(arr[i] == 2) {
count++;
tmp.add(i);
}
}
if(count >= 2) {
for(int i=tmp.get(0); i <= tmp.get(tmp.size()-1); i++) {
arrList.add(arr[i]);
}
} else if(count == 1) {
arrList.add(2);
} else {
arrList.add(-1);
}
int[] answer = arrList.stream().mapToInt(Integer :: intValue).toArray();
return answer;
}
}
🦛 복습
- ArrayList → List
public static void main(String[] args) {
// Integer형 ArrayList 선언
ArrayList<Integer> integerArrayList = new ArrayList<>();
integerArrayList.add(1);
integerArrayList.add(2);
integerArrayList.add(3);
integerArrayList.add(4);
integerArrayList.add(5);
/* Integer ArrayList To int Array (Integer형 ArrayList를 int형 배열로 변환하는 방법) */
// 방법 1 (for문 이용)
int[] arr1 = new int[integerArrayList.size()];
for(int i=0; i < integerArrayList.size(); i++) {
arr1[i] = integerArrayList.get(i).intValue();
}
// 방법 2 (stream 이용)
int[] arr2 = integerArrayList.stream()
.mapToInt(i -> i)
.toArray();
// 방법 3 (stream 이용)
int[] arr3 = integerArrayList.stream()
.mapToInt(Integer :: intValue)
.toArray();
// 방법 4 (stream, filter 이용)
int[] arr4 = integerArrayList.stream()
.filter(i -> i != null)
.mapToInt(i -> i)
.toArray();
/* Integer ArrayList To Integer Array (Integer형 ArrayList를 Integer형 배열로 변환하는 방법) */
// 방법 1 (위에 있는 방법 3과 동일)
int[] arr = integerArrayList.stream()
.mapToInt(Integer::intValue)
.toArray();
- Array → ArrayList
/* Array To ArrayList (배열을 ArrayList 로 변환하는 방법) */
// String형 배열 선언
String[] stringArr = {"a", "b", "c", "d", "e"};
// 방법 1
List<String> list1 = Arrays.asList(stringArr);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/* int Array To Integer ArrayList (int형 배열을 Integer형 ArrayList 로 변환하는 방법) */
// int형 배열 선언
int[] intArr = {1, 2, 3};
// 방법 1
// 위에서 mapToInt() 과정을 통해 Integer를 int 형으로 언박싱 해 준 것처럼
// 여기서는 반대로 boxed() 를 통해 int를 Integer로 박싱해줘야 한다.
// IntStream 로 원소들을 넘겨받았으니 collect() 를 호출해서 List 로 변환한다.
List<Integer> list2 = Arrays.stream()
.boxed()
.collect(Collectors.toList());
}
'코딩테스트_문제풀이 > 프로그래머스' 카테고리의 다른 글
숨어있는 숫자의 덧셈(1) (0) | 2023.12.09 |
---|---|
순서쌍의 개수 (1) | 2023.12.04 |
진료 순서 정하기 (0) | 2023.11.13 |
1로 만들기 (2) | 2023.11.13 |
2차원으로 만들기 (0) | 2023.11.13 |