본문 바로가기

프로그래머스(Java)/Level 0

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

728x90

풀이 힌트

  1. 변수 초기화:
    • s와 e는 각각 첫 번째 2와 마지막 2의 위치를 저장합니다. 초기값은 -1로 설정하여 배열에 2가 없는 경우를 처리합니다.
  2. 배열 순회:
    • 배열을 순회하면서 arr[i]가 2일 때 s가 -1이면 s를 i로 설정합니다.
    • s가 이미 설정된 경우(s != -1), e를 i로 설정합니다.
  3. 특별한 경우 처리:
    • 배열에 2가 없는 경우 (s == -1), [-1]을 반환합니다.
    • 배열에 2가 한 번만 등장하는 경우 (s != -1 && e == -1), [2]을 반환합니다.
  4. 부분 배열 생성:
    • s와 e 사이의 부분 배열을 생성하고 result 배열에 복사합니다.
  5. 결과 반환:
    • 최종적으로 result 배열을 반환합니다.

 


정답은 더보기 클릭

더보기
class Solution {
    public int[] solution(int[] arr) {
        // s: 첫 번째 2의 위치를 저장할 변수, 초기값은 -1
        // e: 마지막 2의 위치를 저장할 변수, 초기값은 -1
        int s = -1;
        int e = -1;
        
        // 배열을 순회하면서 첫 번째와 마지막 2의 위치를 찾는다.
        for (int i = 0; i < arr.length; i++) {
            // 2를 찾았고, 첫 번째 2의 위치를 아직 모르는 경우
            if (arr[i] == 2 && s == -1) {
                s = i; // 첫 번째 2의 위치를 저장
            }
            // 2를 찾았고, 첫 번째 2의 위치를 이미 알고 있는 경우
            else if (arr[i] == 2 && s != -1) {
                e = i; // 마지막 2의 위치를 저장
            }
        }
        
        // 배열에 2가 없는 경우
        if (s == -1) {
            return new int[] {-1};
        }
        // 배열에 2가 한 번만 등장한 경우
        else if (s != -1 && e == -1) {
            return new int[] {2};
        }
        
        // 첫 번째 2와 마지막 2 사이의 부분 배열을 생성
        int[] result = new int[e - s + 1];
        int index = 0;
        
        // 부분 배열에 값을 복사
        for (int i = s; i <= e; i++) {
            result[index++] = arr[i];
        }
        
        // 결과 배열 반환
        return result;
    }
}
728x90