본문 바로가기

Algorithm/Programers - Java

[프로그래머스(Java)] 2의 영역 / rangeClosed

 

Level. 0

 

문제

정수 배열 arr가 주어집니다.
배열 안의 2가 모두 포함된 가장 작은 연속된 부분 배열을 return 하는 solution 함수를 완성해 주세요.
단, arr에 2가 없는 경우 [-1]을 return 합니다.

* 제한사항
- 1 ≤ arr의 길이 ≤ 100,000
- 1 ≤ arr의 원소 ≤ 10

 

풀이

import java.util.Arrays;

class Solution {
    public int[] solution(int[] arr) {
        int[] answer ;
        int start = 100000;
        int end = 0;
        for(int i=0; i<arr.length; i++){
            if(arr[i] == 2){
                start = i;
                break;
            }
        }
        
        for(int i=arr.length-1; i>=0; i--){
            if(arr[i] == 2){
                end = i;
                break;
            }
        }
        
        if(start == 100000) {
            answer = new int[1];
            answer[0] = -1;
            return answer;
        }

        answer = Arrays.copyOfRange(arr, start, end+1);
        return answer;
    }
}

 

 

 


다른 풀이

import java.util.stream.IntStream;

class Solution {
    public int[] solution(int[] arr) {
        int[] idx = IntStream.range(0, arr.length).filter(i -> arr[i] == 2).toArray();
        if (idx.length == 0) return new int[]{-1};
        return IntStream.rangeClosed(idx[0], idx[idx.length - 1]).map(i -> arr[i]).toArray();
    }
}

 

range와 rangeClosed

public static IntStream range(int startInclusive, int endExclusive) {
    ...
}

public static IntStream rangeClosed(int startInclusive, int endInclusive) {
    ...
}
  • 두 메서드 모두 특정 범위의 숫자를 차례대로 생성해 준다. 
  • range : 끝 값을 포함하지 않는다.
  • rangeCloesd : 끝 값을 포함한다. 

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr