코딩테스트연습/[프로그래머스] Java

[프로그래머스] Java 코딩테스트 연습 - 2의 영역

_꼬마돌 2023. 8. 9. 23:24
반응형

[프로그래머스] Java 코딩테스트 연습 - 2의 영역

문제 출처
https://school.programmers.co.kr/learn/courses/30/lessons/181894

프로그래머스

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

programmers.co.kr

 

문제

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

 

풀이

배열의 첫 번째 2의 인덱스를 담을 firstIndex와 마지막 2의 인덱스를 담을 lastIndex를 선언하고 초기값을 -1로 설정했다. 0으로 초기화했더니 몇몇 테스트에서 런타임 에러가 났다. -1이 '찾지 못했음'이나 '아직 값이 설정되지 않았음'을 나타내는 관행적인 값이라고 해서 -1을 넣었는데 해결됐다,,

for문으로 arr을 순회하다가 2가 발견되면 firstIndex에 해당 위치를 담고 break했다.
그 다음에 firstIndex가 -1이 아니라면 다시 for문으로 firstIndex부터 arr을 순회하고 2가 발견되면 lastIndex에 담았다.

answer의 크기가 어느정도일지 알 수 없기 때문에 ArrayList를 사용했다. 
firstIndex가 -1이라면 2를 찾지 못 했다는 뜻이므로 list에 -1을 담고, firstIndex와 lastIndex가 같다면 2가 한 개만 있다는 뜻이므로 2를, 그 외에는 firstIndex와 lastIndex 사이에 위치한 arr의 원소들을 list에 담았다.

list의 크기만큼 answer배열의 크기를 설정하고 list에 저장된 원소들을 asnwer에 복사하여 return했다.

 

소스코드

import java.util.List;
import java.util.ArrayList;

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) {
                firstIndex = i;
                break;
            }
        }
        if (firstIndex != -1) {
            for (int i = firstIndex; i < arr.length; i++) {
                if (arr[i] == 2) {
                    lastIndex = i;
                }
            }
        }
        
        List<Integer> list = new ArrayList<>();
        if (firstIndex == -1) {
            list.add(-1);
        } else if (firstIndex == lastIndex) {
            list.add(2);
        } else {
            for (int i = firstIndex; i <= lastIndex; i++) {
                list.add(arr[i]);
            }
        }
        
        int[] answer = new int[list.size()];
        for (int i = 0; i < list.size(); i++) {
            answer[i] = list.get(i);
        }
        return answer;
    }
}


혼자 보기 아까워서 올리는 오늘 하늘 사진. 태풍 오기 전이라 그런건지는 몰라도 참 예뻤다 ~~

 

반응형