포스트

할 일 목록

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

문제

  • 문제 풀이

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
      import java.util.ArrayList;
      import java.util.List;
        
      class Solution {
          public String[] solution(String[] todo_list, boolean[] finished) {
              List<String> answerList = new ArrayList<>();
        
              for (int i = 0; i < todo_list.length; i++) {
                  if (!finished[i]) {
                      answerList.add(todo_list[i]);
                  }
              }
        
              String[] answer = answerList.toArray(new String[0]);
              return answer;
          }
      }
    
    • String[] answer = {};: 배열의 길이가 0인 빈 배열을 생성한다. 따라서 값을 추가할 때마다 배열의 크기가 늘어나지 않고, ArrayIndexOutOfBoundsException 오류가 발생하는 원인이 될 수 있다. 초기화된 빈 배열 대신에 ArrayList를 사용하여 필요한 값만을 추가한 후, 이를 toArray 메서드를 사용하여 배열로 변환한다.
    • ArrayList에 저장된 요소들을 toArray() 메서드로 배열로 변환할 때 인자로 new String[0]을 전달하면, 내부적으로는 적절한 크기의 새로운 배열이 생성되어 그 크기에 맞게 요소들이 복사된다.
    • ArrayList의 크기가 배열의 크기와 일치하지 않아도 새로운 배열이 필요한 경우마다 크기를 조절하는 비용을 피할 수 있게 한다. new String[0] 대신에 new String[answerList.size()]를 사용하면 비슷한 결과를 얻을 수 있다.


  • 빈 배열에 요소를 할당하려고 하면, NullPointerException 또는 ArrayIndexOutOfBoundsException과 같은 오류가 발생할 수 있다. Java에서 배열을 초기화할 때는 배열의 크기를 지정해주어야 한다.

    1
    
      	String[] answer = new String[todo_list.length];
    


  • finished[i] = false에서 등호 하나가 아니라 등호 두 개를 사용해야 한다. 등호 한 개(=)는 대입 연산자이지만, 등호 두 개(==)는 비교 연산자이다.

    에러

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.