Skip to main content

53. [Java] 빈 배열에 추가, 삭제하기

https://school.programmers.co.kr/learn/courses/30/lessons/181860

  • 빈 배열 X가 있음 (처음엔 아무 원소도 없음)
  • 길이가 같은 두 배열 arr(정수 배열), flag(불린 배열)이 주어짐
  • flag를 순서대로 돌면서:
    • flag[i]true면 → arr[i] 값을 arr[i] × 2배열 X 뒤에 추가
    • flag[i]false면 → 배열 X마지막 arr[i]개 원소를 제거
  • 최종적으로 배열 X를 return

  • 1 ≤ arr의 길이 = flag의 길이 ≤ 100
  • arr의 모든 원소는 1 이상 9 이하의 정수이다.
  • 현재 X의 길이보다 더 많은 원소를 빼는 입력은 주어지지 않는다.

정답코드

import java.util.*;

class Solution {
    public int[] solution(int[] arr, boolean[] flag) {
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < flag.length; i++) {
            if (flag[i]) { // 조건문에서 바로 boolean 값 사용
                // arr[i] * 2번 추가
                for (int j = 0; j < arr[i] * 2; j++) {
                    list.add(arr[i]);
                }
            } else {
                // 리스트 끝에서 arr[i]개 원소 제거
                for (int j = 0; j < arr[i]; j++) {
                   list.remove(list.size() - 1);
                }
            }
        }
        return list.stream().mapToInt(Integer::intValue).toArray();
    }
}
  1. 빈 리스트 list 생성
    → 최종 결과 배열을 만들기 위한 동적 리스트
  2. flag 배열을 순회하면서
    • flag[i]true
      arr[i] * 2arr[i] 값을 list에 추가
    • flag[i]false
      list에서 마지막부터 arr[i]개만큼 원소 제거
  3. 최종적으로 listint[] 배열로 바꿔서 return

오답

import java.util.*;

class Solution {
    public int[] solution(int[] arr, boolean[] flag) {
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < flag.length; i++) {
            if (flag[i] = true) { // ❌
                list.add(arr[i]); // ❌
                list.add(arr[i]); // ❌
            } else {
                for (int j = 0; j < arr[i]; j++) {
                   list.remove(list.size() - 1);
                }
            }
        }
        return list.stream().mapToInt(Integer::intValue).toArray();
    }
}

image.png

1) 조건문에서 대입(=) 사용

if (flag[i] = true) { // ❌

여기서 =는 대입 연산자라서, 항상 true가 된다. 조건 비교는 조건문에서 바로 boolean값을 써야 한다.

if (flag[i]) // ✔️

2) arr[i] × 2번 추가가 아니라 2번만 추가하고 있음

list.add(arr[i]); // ❌
list.add(arr[i]); // ❌

이건 무조건 두 번만 넣는 코드이다. 문제는 arr[i] 값을 arr[i] * 2번 넣어야 한다. 아래와 같이 수정했다.

// arr[i] * 2번 추가 ✔️
for (int j = 0; j < arr[i] * 2; j++) {
    list.add(arr[i]);
}