프로그래머스 빈 배열에 추가, 삭제하기

KIMYEONGJUN·2026년 7월 18일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

아무 원소도 들어있지 않은 빈 배열 X가 있습니다.
길이가 같은 정수 배열 arr과 boolean 배열 flag가 매개변수로 주어질 때, flag를 차례대로 순회하며 flag[i]가 true라면 X의 뒤에 arr[i]를 arr[i] × 2 번 추가하고, flag[i]가 false라면 X에서 마지막 arr[i]개의 원소를 제거한 뒤 X를 return 하는 solution 함수를 작성해 주세요.

내가 이 문제를 보고 생각해본 부분

빈 배열 X 역할을 하는 ArrayList X를 새로 만든다.
ArrayList는 원소 추가와 삭제에 편리하다.
arr와 flag의 길이가 같으므로 for문에서 i를 0부터 arr.length - 1까지 순회한다.
flag[i]가 true이면 arr[i] 값을 arr[i] * 2번 X에 추가한다.
즉, arr[i] 값을 두 배만큼 반복해 추가하는 처리를 한다.
flag[i]가 false이면 현재 X 크기를 size에 저장한다.
그리고 X의 뒤쪽에서부터 arr[i] 만큼 원소를 제거한다.
이 때 remove 메서드를 사용할 때 인덱스가 0부터 감소하는 것이 아니라 size - 1부터 차례로 뒤에서 앞으로 접근하기 때문에 size - 1 - j를 인덱스로 빼야 한다.
모든 반복이 끝나면 X의 원소를 담는 size 크기의 정수 배열 answer를 생성한 뒤, X의 각 원소를 순서대로 answer 배열에 복사한다.
완성된 answer 배열을 반환한다.

코드로 구현

import java.util.ArrayList;

class Solution {
    public int[] solution(int[] arr, boolean[] flag) {
        ArrayList<Integer> X = new ArrayList<>();

        for(int i = 0; i < arr.length; i++) {
            if(flag[i]) {
                for(int j = 0; j < arr[i] * 2; j++) {
                    X.add(arr[i]);
                }
            } else {
                int size = X.size();
                for(int j = 0; j < arr[i]; 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;
    }
}

프로그래머스 코드

package programmers;

import java.util.ArrayList;
import java.util.Arrays;

// 프로그래머스 빈 배열에 추가, 삭제하기
public class Main85 {
    public static void main(String[] args) {
        int[] arr = {3, 2, 4, 1, 3};
        boolean[] flag = {true, false, true, false, false};
        int[] result = solution(arr, flag);
        System.out.println(Arrays.toString(result)); // [3, 3, 3, 3, 4, 4, 4, 4]
    }

    public static int[] solution(int[] arr, boolean[] flag) {
        ArrayList<Integer> X = new ArrayList<>();

        for (int i = 0; i < arr.length; i++) {
            if (flag[i]) {
                for (int j = 0; j < arr[i] * 2; j++) {
                    X.add(arr[i]);
                }
            } else {
                int size = X.size();
                for (int j = 0; j < arr[i]; 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;
    }
}

위에 있는 코드를 변경한 코드

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글