import java.util.ArrayList;
import java.util.List;
class Solution {
public int[] solution(int[] arr, boolean[] flag) {
List<Integer> X = new ArrayList<>();
for (int i = 0; i < arr.length; i++) {
if (flag[i]) {
int num = arr[i];
for (int j = 0; j < num * 2; j++) {
X.add(num);
}
} else {
int num = arr[i];
int size = X.size();
if (size >= num) {
for (int j = 0; j < num; j++) {
X.remove(size - 1 - j);
}
}
}
}
int[] answer = new int[X.size()];
for (int i = 0; i < X.size(); i++) {
answer[i] = X.get(i);
}
return answer;
}
}
배열 arr과 flag를 인덱스 i를 기준으로 순회합니다.
flag[i]가 true인 경우 : arr[i] 값을 num 변수에 저장합니다.
num * 2번 만큼 num을 X 리스트에 추가합니다.
flag[i]가 false인 경우 : arr[i] 값을 num 변수에 저장합니다.
X 리스트의 현재 크기를 size 변수에 저장합니다.
X 리스트의 크기가 num보다 크거나 같은 경우 : num 개수만큼 X 리스트의 마지막 원소부터 제거합니다.
X 리스트의 원소를 배열 answer로 복사하여 반환합니다.