본문으로 바로가기

2의 영역

category 코딩테스트_문제풀이/프로그래머스 2023. 11. 13. 18:55

🦛 문제 설명

정수 배열 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