본문 바로가기
코딩테스트 연습

2의 영역

by 신재은👩🏼‍💻 2024. 4. 22.

문제 설명

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

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

 

제한사항

  • 1 ≤ arr의 길이 ≤ 100,000

 

입출력 예

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 pointer1 = -1;
        int pointer2 = -1;
        
        // 2의 위치를 찾아 포인터를 설정
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == 2) {
                if (pointer1 == -1) {
                    pointer1 = i;  // 첫 번째 2의 위치
                }
                pointer2 = i;  // 계속해서 마지막 2의 위치를 업데이트
            }
        }
        
        // 2가 하나도 없는 경우 [-1] 반환
        if (pointer1 == -1) {
            return new int[] {-1};
        }
        
        // pointer1부터 pointer2까지의 배열 부분을 복사하여 반환
        return Arrays.copyOfRange(arr, pointer1, pointer2 + 1);
    }
}


큰 틀은 그대로 가져가는데 약간의 문법 오류나 코드상 개선 사항을 GPT를 통해 첨삭 받음.

 

첨삭 받을 일이 아예 없으면 좋겠지만... 뭘 이렇게 자꾸 온전하지 못 하게 쓰는지 모르겠음.

 

이 문제를 통해서는 '투 포인터', '슬라이딩 윈도우' 기법? 알고리즘?을 알게 되었다.

 

어제 코테 스터디에서 어떤 분이 pointer 변수 2개를 가지고 문제를 풀었던데 그게 투 포인터 기법이었구만.

'코딩테스트 연습' 카테고리의 다른 글

커피 심부름  (0) 2024.04.22
리스트 자르기  (0) 2024.04.22
세 개의 구분자  (0) 2024.04.22
주사위 게임 3  (0) 2024.04.22
문자열 묶기  (0) 2024.04.21