프로그래머스 2의 영역

KIMYEONGJUN·2026년 6월 14일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

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

내가 이 문제를 보고 생각해본 부분

firstIndex와 lastIndex 변수를 -1로 초기화한다.
이 변수들은 배열 내에서 숫자 2가 처음 등장한 위치와 마지막 등장한 위치를 저장하기 위한 변수이다.
배열 arr를 처음부터 끝까지 순회한다.
각 원소가 2인지 검사하는데, 2이면 다음을 수행한다.
만약 firstIndex가 아직 -1이라면(즉, 2가 처음 발견된 경우) 현재 인덱스를 firstIndex에 기록한다.
이로써 첫 등장 위치를 저장한다.
그리고 2가 발견될 때마다 lastIndex를 현재 인덱스로 갱신한다.
이 위치는 2가 마지막으로 발견된 인덱스가 된다.
배열 전체를 순회한 후, 만약 firstIndex가 여전히 -1이라면 배열 안에 2가 하나도 없다는 의미이므로, 길이 1짜리 배열 [-1]을 반환한다.
2가 적어도 하나 이상 발견돼서 firstIndex와 lastIndex가 유효하다면, lastIndex와 firstIndex의 차이에 1을 더해 부분 배열의 길이를 구한다.
새로운 배열 answer를 해당 길이로 선언한 뒤, firstIndex부터 lastIndex까지 원래 배열의 원소를 복사하여 넣는다.
마지막으로 이 부분 배열을 반환한다.

코드로 구현

class Solution {
    public int[] solution(int[] arr) {
        int firstIndex = -1;
        int lastIndex = -1;

        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == 2) {
                if (firstIndex == -1) {
                    firstIndex = i;
                }
                lastIndex = i;
            }
        }

        if (firstIndex == -1) {
            return new int[] {-1};
        }

        int length = lastIndex - firstIndex + 1;
        int[] answer = new int[length];
        for (int i = 0; i < length; i++) {
            answer[i] = arr[firstIndex + i];
        }
        return answer;
    }
}

프로그래머스 코드

package programmers;

import java.util.Arrays;

// 프로그래머스 2의 영역
public class Main51 {
    public static void main(String[] args) {
        Main51 solutionInstance = new Main51();

        int[] arr1 = {1, 2, 1, 4, 5, 2, 9};
        int[] arr2 = {1, 2, 1};
        int[] arr3 = {1, 1, 1};
        int[] arr4 = {1, 2, 1, 2, 1, 10, 2, 1};

        System.out.println(Arrays.toString(solutionInstance.solution(arr1))); // [2, 1, 4, 5, 2]
        System.out.println(Arrays.toString(solutionInstance.solution(arr2))); // [2]
        System.out.println(Arrays.toString(solutionInstance.solution(arr3))); // [-1]
        System.out.println(Arrays.toString(solutionInstance.solution(arr4))); // [2, 1, 2, 1, 10, 2]
    }

    public int[] solution(int[] arr) {
        int firstIndex = -1;
        int lastIndex = -1;

        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == 2) {
                if (firstIndex == -1) {
                    firstIndex = i;
                }
                lastIndex = i;
            }
        }

        if (firstIndex == -1) {
            return new int[] {-1};
        }

        int length = lastIndex - firstIndex + 1;
        int[] answer = new int[length];
        for (int i = 0; i < length; i++) {
            answer[i] = arr[firstIndex + i];
        }
        return answer;
    }
}

위에 있는 코드를 변경한 코드

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글