Javascript - 프로그래머스 13일차

이율곡·2023년 6월 21일

Programmers

목록 보기
13/44
post-thumbnail

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 함수를 작성해 주세요.

입출력 예

arrflagresult
[3, 2, 4, 1, 3][true, false, true, false, false][3, 3, 3, 3, 4, 4, 4, 4]

13일차에서 가장 힘들었던 문제다. 도대체 무슨 문제인지 이해하는 것도 어려웠다. 그러다보니 어떻게 하라는 건지에 대한 생각도 들어서 고민한 시간이 많았다. 그래도 성장하기 위한 하나의 단계라고 생각하고 열심히 풀어보았다.

접근방법

이 문제의 접근방법은 총 4단계로 나눌 수 있다.

  1. 주어진 배열 arr과 flag를 순회하면서 flag[i]의 값을 확인.
  2. flag[i]가 true이면, arr[i] 값을 2배로 만들어 arr[i]만큼 arr[i]를 X 배열에 추가.
  3. flag[i]가 false이면, X 배열에서 마지막 arr[i]개의 원소를 제거.
  4. 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일차다.

profile
음악을 좋아하는 사람이 음악을 만들 듯, 개발을 좋아하게 될 사람이 쓰는 개발이야기

0개의 댓글