13일차
13일차는 꽤나 애를 먹었다. 문제를 이해하는데 어려움을 겪었고, 문제도 쉽지 않았다. 주어진 시간에 푸는 문제도 줄었다. 그래도 차근차근 해보면 풀 수 있는데, 남은 문제들은 이전과 같이 많이 풀 수 있지는 않을 거 같다.

13일차로써 코딩 기초트레이닝을 77%를 달성했다. 약 2주간에 걸쳐서 아래와 같은 결과가 나왔다.

거의 200문제를 풀었는데 남은 문제들은 솔직히 기초라고 하기보다는 초중급 문제들만 남았다고 본다. 그래서 앞으로는 하루에 2-3문제씩 풀면서 보다 상세하게 풀어보려 할 예정이다.
오늘의 문제
빈 배열에 추가, 삭제하기
아무 원소도 들어있지 않은 빈 배열 X가 있습니다. 길이가 같은 정수 배열 arr과 boolean 배열 flag가 매개변수로 주어질 때, flag를 차례대로 순회하며 flag[i]가 true라면 X의 뒤에 arr[i]를 arr[i] × 2 번 추가하고, flag[i]가 false라면 X에서 마지막 arr[i]개의 원소를 제거한 뒤 X를 return 하는 solution 함수를 작성해 주세요.
입출력 예
| arr | flag | result |
|---|
| [3, 2, 4, 1, 3] | [true, false, true, false, false] | [3, 3, 3, 3, 4, 4, 4, 4] |
13일차에서 가장 힘들었던 문제다. 도대체 무슨 문제인지 이해하는 것도 어려웠다. 그러다보니 어떻게 하라는 건지에 대한 생각도 들어서 고민한 시간이 많았다. 그래도 성장하기 위한 하나의 단계라고 생각하고 열심히 풀어보았다.
접근방법
이 문제의 접근방법은 총 4단계로 나눌 수 있다.
- 주어진 배열 arr과 flag를 순회하면서 flag[i]의 값을 확인.
- flag[i]가 true이면, arr[i] 값을 2배로 만들어 arr[i]만큼 arr[i]를 X 배열에 추가.
- flag[i]가 false이면, X 배열에서 마지막 arr[i]개의 원소를 제거.
- arr과 flag를 순회한 후 최종적으로 변경된 X 배열을 반환.
풀이
function solution(arr, flag) {
let X = [];
for (let i = 0; i < flag.length; i++) {
if (flag[i]) {
for (let j = 0; j < arr[i] * 2; j++) {
X.push(arr[i]);
}
} else {
X = X.slice(0, X.length - arr[i]);
}
}
return X;
}
풀이는 접근방법과도 같다. flag를 순회, flag 값 확인, 값에 따른 arr값 추가 및 반환. 이를 생각하는 것조차가 너무 어려웠다. 코드를 작성하는 건 나중의 문제지만, 우선 이를 수학적으로 한다는 것이 어려웠다. 나에게 이런 수학적 사고가 부족하다고 느낀 순간이다.
정리하기
스텝을 밟을 때
13일차까지 하면서 이제는 많이 어려워졌다고 생각한다. 지금까지는 '나의 기본 + 풀면서의 성장'으로 지금까지 왔지만, 앞으로는 한 문제 한 문제 집중해서 봐야겠다.
코딩 기초트레이닝 부분이기 때문에 충분히 할 수 있다는 자신감을 갖도록 하고, 문제에 대한 이해/접근방법/풀이과정/코딩 이 순서대로 문제를 흡수하도록 해야겠다.
또한 수학적 사고력을 기르기 위해 수학을 공부 또한 해보면 어떨까 생각하는 13일차다.