Coding Test/Java Coding Test

[프로그래머스 / 자바] - 빈 배열에 추가, 삭제하기

nam_ji 2024. 6. 15. 20:04

빈 배열에 추가, 삭제하기

문제

  • 정수 배열 arr과 논리형 배열 flag가 매개변수로 주어집니다. (길이는 같습니다.)
  • 빈 배열 X가 있을 때, flag가 차례로 순회하여
  • flag[i] 번째 원소가 true면, arr[i]를 arr[i] * 2번 추가하고,
  • flag[i] 번째 원소가 false면, X에서 마지막 arr[i]개의 원소를 제거한 뒤
  • X를 출력하는 문제입니다.


테스트 (인텔리제이)

  • 빈 배열에 추가할 수 있도록 List인 answer를 만들고
  • for문을 arr이나 flag의 크기만큼 순회하도록 하게 하고
  • if문을 통해 flag의 원소가 true면
  • 안에 for문을 추가하여 첫 번째 for문의 인덱스를 이용하여 arr의 원소를 꺼내 2를 곱한만큼 순회하도록 합니다.
  • 그 안에 answer의 add 메서드를 이용하여 arr의 해당 원소를 for문 만큼 추가하도록 하고
  • else 문에는 또 다른 for문을 이용하고
  • answer의 remove 메서드를 이용하여 answer의 크기에서 1을 뺸 위치의 값을 삭제해줍니다.
import java.util.ArrayList;
import java.util.List;

public class 빈_배열에_추가_삭제하기 {
  public static void main(String[] args) {
    /*
    정수 배열 arr과 논리형 배열 flag가 매개변수로 주어집니다.
    (길이는 같습니다.)
    빈 배열 X가 있을 때,
    flag가 차례로 순회하여
    flag[i] 번째 원소가 true면, arr[i]를 arr[i] * 2번 추가하고,
    flag[i] 번째 원소가 false면, X에서 마지막 arr[i]개의 원소를 제거한 뒤
    X를 출력하는 문제입니다.

    입출력 예시
    arr	            flag	                            result
    [3, 2, 4, 1, 3]	[true, false, true, false, false]	[3, 3, 3, 3, 4, 4, 4, 4]

    입출력 설명
    i	flag[i]	arr[i]	X
                      []
    0	true	  3	      [3, 3, 3, 3, 3, 3]
    1	false	  2	      [3, 3, 3, 3]
    2	true	  4	      [3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4]
    3	false	  1	      [3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4]
    4	false	  3	      [3, 3, 3, 3, 4, 4, 4, 4]
     */

    int[] arr = {3, 2, 4, 1, 3};
    boolean[] flag = {true, false, true, false, false};
    List<Integer> answer = new ArrayList<>();

    for (int i = 0; i < arr.length; i++) {
      if (flag[i]) {
        for (int j = 0; j < arr[i] * 2; j++) {
          answer.add(arr[i]);
        }
      } else  {
        for (int k = 0; k < arr[i]; k++) {
          answer.remove(answer.size() - 1);
        }
      }
    }

    System.out.println(answer);
  }
}

프로그래머스 코드

import java.util.*;

class Solution {
    public List solution(int[] arr, boolean[] flag) {
        List<Integer> answer = new ArrayList<>();
        
        for (int i = 0; i < arr.length; i++) {
            if (flag[i]) {
                for (int j = 0; j < arr[i] * 2; j++) {
                    answer.add(arr[i]);
                }
            } else  {
                for (int k = 0; k < arr[i]; k++) {
                    answer.remove(answer.size() - 1);
                }
            }
        }
        
        return answer;
    }
}