프로그래머스/Lv. 0(코딩 기초 트레이닝)

[프로그래머스 코딩테스트] 빈 배열에 추가, 삭제하기(Java)

Sigfriede 2023. 6. 4. 01:10

  문제 설명

  아무 원소도 들어있지 않은 빈 배열 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의 길이보다 더 많은 원소를 빼는 입력은 주어지지 않습니다.

 

  입출력 예

arr flag result
[3, 2, 4, 1, 3] [true, flase, true, false, false] [3, 3, 3, 3, 4, 4, 4, 4]
import java.util.ArrayList;
class Solution {
    public int[] solution(int[] arr, boolean[] flag) {
        ArrayList<Integer> list = new ArrayList<>();
        for (int i = 0; i < arr.length; i++) {
            if (flag[i]) {
                for (int j = 0; j < arr[i] * 2; j++) {
                    list.add(arr[i]);
                }
            } else {
                for (int j = 0; j < arr[i]; j++) {
                    list.remove(list.size() - 1);
                }
            }
        }
        int[] answer = new int[list.size()];
        for (int i = 0; i < list.size(); i++) {
            answer[i] = list.get(i);
        }
        return answer;
    }
}

  ArrayList를 생성합니다. 제네릭 타입은 Integer입니다.

  바깥 for문이 arr의 길이만큼 순회합니다. if문에서 flag의 i번째 원소가 true라면 안쪽 for문에서 j는 arr의 i번째 원소에 2를 곱한 값만큼 순회합니다. 안쪽 for문이 순회하는 만큼 arr의 i번째 원소만큼 리스트에 추가하기 위함입니다.

  add 메소드를 이용하여 arr의 i번째 원소를 추가합니다.

  if문의 조건에 맞지 않는다면, 즉 flag의 i번째 원소가 false라면 안쪽 for문이 arr의 i번째 길이만큼 순회합니다. 마찬가지로 arr의 i번째 원소만큼 리스트에서 제거하기 위함입니다.

  remove 메소드를 이용하여 list에서 list의 마지막 원소부터 제거합니다.

  answer 배열을 생성합니다. 배열의 크기는 list의 size와 동일합니다. answer에 list를 복사할 것입니다.

  for문이 list의 크기만큼 순회합니다. answer의 i번째 원소에 list의 i번째 원소를 할당합니다.