프로그래머스/Lv. 0(코딩 기초 트레이닝)

[프로그래머스 코딩테스트] 배열 만들기 4(Java)

Sigfriede 2023. 5. 24. 01:20

  문제 설명

  정수 배열 arr가 주어집니다. arr를 이용해 새로운 배열 stk를 만드려고 합니다.

  변수 i를 만들어 초기값을 0으로 설정한 후 i가 arr의 길이보다 작으면 다음 작업을 반복합니다.

  • 만약 stk가 빈 배열이라면 arr[i]를 stk에 추가하고 i에 1을 더합니다.
  • stk에 원소가 있고, stk의 마지막 원소가 arr[i]보다 작으면 arr[i]를 stk의 뒤에 추가하고 i에 1을 더합니다.
  • stk에 원소가 있는데 stk의 마지막 원소가 arr[i]보다 크거나 같으면 stk의 마지막 원소를 stk에서 제거합니다.

위 작업을 마친 후 만들어진 stk를 return 하는 solution 함수를 완성해 주세요.

 

  제한사항

  • 1 <= arr의 길이 <= 100,000
    • 1 <= arr의 원소 <= 100,000

 

  입출력 예

arr result
[1, 4, 2, 5, 3] [1, 2, 3]
import java.util.ArrayList;
class Solution {
    public int[] solution(int[] arr) {
        ArrayList<Integer> list = new ArrayList<>();
        for (int i = 0; i < arr.length; i++) {
            if (list.isEmpty()) {
                list.add(arr[i]);
            } else if (list.get(list.size() - 1) < arr[i]) {
                list.add(arr[i]);
            } else {
                list.remove(list.size() - 1);
                i--;
            }
        }
        int[] stk = new int[list.size()];
        int index = 0;
        for (int i = 0; i < list.size(); i++) {
            stk[index++] = list.get(i);
        }
        return stk;
    }
}

  배열의 크기를 유동적으로 변경하기 위해 ArrayList를 생성했습니다.

  for문이 arr의 길이만큼 순회합니다.

  if문에서 isEmpty 메소드를 이용하여 빈 배열인지 확인합니다. 만약 빈 배열이라면 add 메소드를 이용하여 list에 arr의 i번째 원소를 추가합니다.

  else if에서 만약 list의 마지막 원소(list.size() - 1)가 arr의 i번째 원소보다 작다면 list에 arr의 i번째 원소를 추가합니다.

  만약 앞선 조건에 해당하지 않는다면, 즉 list의 마지막 원소가 arr의 i번째 원소보다 크거나 같다면 remove 메소드를 이용하여 list의 마지막 원소를 제거합니다. i에 1을 더한다는 조건이 없기 때문에 i에 1을 빼고, 현재 i값을 반복합니다.

  stk 배열을 생성합니다. list의 크기와 동일하게 지정합니다. list의 원소를 stk 배열에 복사할 것입니다. index 변수를 생성합니다.

  for문이 list의 크기만큼 순회합니다. stk의 index번째 원소에 list의 i번째 원소를 할당합니다.