
할 일 목록
https://school.programmers.co.kr/learn/courses/30/lessons/181885

두 배열을 비교해서 finished 요소가 false 인 todo_list의 index를 찾아서 result에 담아서 return 하는 문제이다.
function solution(todo_list, finished) {
var answer = [];
for (let i = 0; i < todo_list.length; i++) {
if (finished[i] == false) answer.push(todo_list[i]);
}
return answer;
}
처음에는 위와 같이 for문을 이용해서 풀었다.
사실 저걸 1개의 for문으로 풀 생각을 안하고 2중 for문을(...?) 사용해서 풀려고 해서 순간 바보가된 느낌이였다.
결국 2배열의 길이는 동일하기 때문에 주축이 되는 todo_list를 for문을 사용해서 finished[i]가 false인 index만 찾아주면 되는 쉬운 문제였다.
그리고 요즘 공부하고 있는 filter 메서드를 이용해서 한번 더 풀어 보았다.
function solution(todo_list, finished) {
var answer = [];
todo_list.filter((item, idx) => {
// console.log(`item : ${item} | idx : ${idx}`);
if (finished[idx] == false) answer.push(item);
});
return answer;
}
중간에 console.log 를 한 이유가 사실 filter에서는 인자를 보통 1개만 사용하다보니 index는 그럼 어떻게 하는거였지...? 가물가물해서 바로 구글링으로 mdn 문서를 보니 2번째 인자가 바로 index였다!
그래서 위에서 풀었던 것처럼 finished[idx]로도 해결할 수 있었다.
여기서 하나 더 추가를 하자면,
저 조건식(finished[idx] == false)을 조금더 간편하게 쓸 수도 있는데 바로
if (!finished[idx]) answer.push(item);
앞에 !를 이용해서 false임을 표현해 줄 수도 있다.