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