문제 설명
아무 원소도 들어있지 않은 빈 배열 X가 있습니다. 길이가 같은 정수 배열 arr과 boolean 배열 flag가 매개변수로 주어질 때, flag를 차례대로 순회하며 flag[i]가 true라면 X의 뒤에 arr[i]를 arr[i] × 2 번 추가하고, flag[i]가 false라면 X에서 마지막 arr[i]개의 원소를 제거한 뒤 X를 return 하는 solution 함수를 작성해 주세요.
제한사항
1 ≤ arr의 길이 = flag의 길이 ≤ 100 arr의 모든 원소는 1 이상 9 이하의 정수입니다. 현재 X의 길이보다 더 많은 원소를 빼는 입력은 주어지지 않습니다.
나의 코드
import java.util.List;
import java.util.ArrayList;
class Solution {
public int[] solution(int[] arr, boolean[] flag) {
List<Integer> X = new ArrayList<>();
for(int i=0; i<flag.length; i++) {
if(flag[i]==true) {
for(int j=0; j<arr[i]*2; j++) {
X.add(arr[i]);
}
} else {
for(int j=0; j<arr[i]; j++) {
X.remove(X.size()-1);
}
}
}
int[] answer = new int[X.size()];
for(int i=0; i<X.size(); i++) {
answer[i] = X.get(i);
}
return answer;
}
}
다른 사람 코드
import java.util.stream.Stream;
class Solution {
public int[] solution(int[] arr, boolean[] flag) {
String answer = "";
for(int idx=0; idx<arr.length; idx++) {
if(flag[idx]) {
answer += String.valueOf(arr[idx]).repeat(arr[idx]*2);
}
else {
answer = answer.substring(0, answer.length() - arr[idx]);
}
}
return Stream.of(answer.split("")).mapToInt(Integer::parseInt).toArray();
}
}
List
를 사용하지 않고 배열
과 String
으로 풀이 (valueOf()
, repeat()
, substring()
등의 메소드 사용)
느낀 점
문제를 꼼꼼히 읽고 각각의 조건마다 이중반복문을 사용하여 List에 저장 및 삭제 시켜서 해결했다. 확실히 배열의 길이가 고정되다보니 추가,삭제하는 문제는 List를 활용하여 푸는 게 가장 간편한 것 같다.