문제
정수 배열
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
예시

풀이
반복 횟수를 예측할 수 없기 때문에
while
문을 사용하고, ArrayList
가 비어 있는지 확인할 때는 isEmpty()
를 사용하였으며, 마지막 값을 자주 참조하므로 last
변수에 저장해 사용하고 조건에 따라 arr[i]
를 추가하거나 마지막 요소를 제거하며 stkArr
을 완성한 후 int[]
배열로 변환하여 출력하였다.public class ex29 {
public static void main(String[] args) {
int[] arr = {1, 4, 2, 5, 3};
int i = 0;
// 배열이 없을 때
List<Integer> stkArr = new ArrayList<>();
while (i < arr.length) {
// 배열은 있지만 arr[i] 보다 작을 때
if (stkArr.isEmpty()) {
stkArr.add(arr[i]);
i++;
} else {
int last = stkArr.get(stkArr.size() - 1);
if (last < arr[i]) {
stkArr.add(arr[i]);
i++;
} else {
stkArr.remove(stkArr.size() - 1);
}
}
}
int[] stk = new int[stkArr.size()];
for (int j = 0; j < stk.length; j++) {
stk[j] = stkArr.get(j);
}
for (i = 0; i < stkArr.size(); i++) {
System.out.println("저장된 배열 : " + stkArr.get(i));
}
}
}
Share article