코딩테스트/프로그래머스

[프로그래머스] 2의 영역 자바 java

플래시🦥 2023. 8. 17.
반응형

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

 

프로그래머스

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

programmers.co.kr

문제 설명
정수 배열 arr가 주어집니다. 배열 안의 2가 모두 포함된 가장 작은 연속된 부분 배열을 return 하는 solution 함수를 완성해 주세요.

단, arr에 2가 없는 경우 [-1]을 return 합니다.

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

 


배열에 2가 없다면 {-1}을 배열에 2가 하나이면 {2}를 반환하고, 

2가 2개 이상 존재한다면 처음 2와 마지막 2를 포함한 그 사이의 배열을 반환하면 되는 문제이다. 

 

처음으로는 배열을 처음부터 검사하면서 2의 개수를 카운트하고 해당 인덱스를 리스트에 추가해 주었다. 

그다음으로는 2의 개수가 0이라면 {-1}을 반환하며 작업이 끝나도록 하고 

그렇지 않은 수는 인덱스를 저장한 리스트를 가지고 배열을 잘라주고 해당 배열을 반환하도록 코드를 작성하였다. 

 

전체 코드

import java.util.*;
class Solution {
    public int[] solution(int[] arr) {
        int cnt=0;
        List<Integer> list = new ArrayList<>();
        for(int i=0;i<arr.length;i++){
            if(arr[i]==2){
                cnt++;
                list.add(i);
            }   
        }
        if(cnt==0){ 
             return new int[]{-1};   
            }
        
        int[] answer =  Arrays.copyOfRange(arr, list.get(0),list.get(list.size()-1)+1);
    
        
        return answer;
    }
}
728x90
반응형

댓글