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

[프로그래머스] Java :: 2의 영역

블로그 주인장 2024. 3. 23.

문제 링크

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

 

입출력 예시

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 start = -1;
        int end = -1;
        
        for (int i = 0; i < arr.length; i++) {
             if(arr[i] == 2) {
                start = i;
                break;
            }
         }
        
        for (int i = arr.length - 1; i > -1; i--) {
            if(arr[i] == 2) {
                end = i;
                break;
            }
        }
        
        if (start == -1 && end == -1) {
            return new int[]{-1};
        } else {
            //copyOfRange의 마지막 인덱스는 -1 이 되기 때문에 +1 처리
            return Arrays.copyOfRange(arr, start, end + 1);
        }
    }
}

 

풀이

  1. 시작하는 점을 나타내는 변수인 start와 마지막을 나타내는 end를 -1로 초기화 한다.
  2. for문을 사용해서 2로 시작하는 구간과 2로 끝나는 구간을 확인한다.
  3. for문을 0부터 시작하는 방법과 for문을 마지막 Length -1 부터 시작해서 break문으로 해당 조건문을 탈출한다.
  4. start와 end 값이 -1이 아니면 2가 없는 경우로 판단해서 [-1]로 반환한다.
  5. -1의 값이 아닌 경우에는 2의 값이 있는 것으로 판단하고 Arrays.copyOfRange() 메서드를 활용해서
    2가 포함된 연속된 부분 배열을 반환한다.
반응형

댓글