Skip to main content

35. [Java] 할 일 목록

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

  • 오늘 해야 할 일이 담긴 문자열 배열 todo_list와
  • 각각의 일을 지금 마쳤는지를 나타내는 boolean 배열 finished가 매개변수로 주어진다.
  • todo_list에서 아직 마치지 못한 일들을 순서대로 담은 문자열 배열을 return

  • 1 ≤ todo_list의 길이 1 ≤ 100
  • 2 ≤ todo_list의 원소의 길이 ≤ 20
    • todo_list의 원소는 영소문자로만 이루어져 있다,.
    • todo_list의 원소는 모두 서로 다르다.
  • finished[i]는 true 또는 false이고 true는 todo_list[i]를 마쳤음을, false는 아직 마치지 못했음을 나타낸다.
  • 아직 마치지 못한 일이 적어도 하나 있다.

정답코드

import java.util.*;

class Solution {
    public String[] solution(String[] todo_list, boolean[] finished) {
        ArrayList<String> list = new ArrayList<>();
        for (int i = 0; i < finished.length; i++) {
            if (!finished[i]) {
                list.add(todo_list[i]);
            }
        }
        return list.toArray(new String[0]);
    }
}
  • boolean[] finished를 순회하며 false인 인덱스의 요소만 todo_list에서 찾아서 list에 추가한다.
  • list를 String[] 으로 반환해서 리턴한다. → list.toArray(new String[0]);
  • if 조건문에서 문자열 "false"와 비교하는 것이 아니라, boolean 값을 직접 비교해야 하는 것이 핵심이다.

오답

import java.util.*;

class Solution {
    public String[] solution(String[] todo_list, boolean[] finished) {
        ArrayList<String> list = new ArrayList<>();
        for (int i = 0; i < finished.length; i++) {
            if (finished[i].equals("false")) {
                list.add(todo_list[i]);
            }
        }
        // ★ 명시적 타입 지정 (이렇게 하지 않으면 Object 반환)
        return list.toArray(new String[0]); 
    }
}

image.png

처음 제출한 코드는 "false"를 문자열로 비교하고 있어서 컴파일 에러 또는 논리 오류가 발생한다. finished 배열은 boolean[] 타입이므로 finished[i]true 또는 false논리형(boolean) 값이다. 따라서 .equals("false")로 비교하는 것이 아니라 boolean 끼리 비교해야 한다.

if (finished[i].equals("false"))

아래와 같이 수정해서 해결해주었다.

if (!finished[i])