Featured image of post 프로그래머스 코딩 기초 트레이닝 후기

프로그래머스 코딩 기초 트레이닝 후기

매일 5문제씩 가볍게 고민해보기

약 25일간 매일 알고리즘 문제 풀이를 하며 느낀 점을 적어보았습니다.

 

01.

코딩 기초 트레이닝 캘린더

매일 5문제씩 풀어볼 수 있다. 그날 그날 풀어야 할 문제들은 정해져 있어서 어떤 문제를 풀 지 고민하지 않아도 된다.
문제들은 사실 정말 쉽다. 부담없이 가볍게 고민해보기 좋은 문제들로 구성되어 있다.

다른 사람의 코드를 보지 않고 하루에 5문제를 풀면 도장을 찍어준다.
이게 또 채워나가는 쏠쏠한 재미가 있다. (깃허브의 잔디같은…)
그리고 그렇게 25일을 모두 도장으로 채우면 맨 위에 보이는 귀여운 도장이 또 찍힌다.

사실 22일에는 문제를 풀지 못했는데, 시험기간이라는 핑계를 대면서 스스로 합리화를 했었다.
5문제를 푸는데는 30분도 걸리지 않는데… 참 아쉽다.

 

02.

프로그래머스에서 문제를 풀어본 것은 이번이 처음이다. 지금까지 백준 외에는 사용해본 적이 없다.
프로그래머스가 좋다고 생각했던 부분은 우선 JavaScript의 지원이다. 그리고 다른 사람들의 풀이가 정리되어있다.

모든 풀이에는 댓글과 좋아요 등의 반응을 할 수 있는데, 이게 정말 큰 도움이 된다.
당연히 좋은 코드에는 많은 좋아요가 달리고, 최상단에 노출된다.
다른 사람들의 코드를 보면서 새롭게 알게되는 부분도 있고, 좋다고 평가되었지만 더 개선할 수 있는 점을 댓글에서 알려주기도 한다.

간혹 광기를 표현하는 사람들도 있다. (하지만 이 분은 정말 대단하신 분이다.)

 

나도 문제를 풀고나서 다른 사람들의 풀이와 비교해보고,
좋다고 생각한 풀이나 아이디어를 주석으로 정리해놓기도 했다.

“이게 맞는 코드야?“라고 처음에 생각했었던 코드를 정리해놨다.

그리고 다양한 반응들. 의심이 들면 검증해보면 된다.

 

03.

문제들을 풀어 보면서 JavaScript가 얼마나 편리한 언어인지 알 수 있었다.
알고리즘 문제들을 많이 풀어본 사람이라면 파이썬이 좋은 언어라는 걸 알게 되는데, 개인적으로 JavaScript가 거의 사기에 가깝게 많은 기능을 제공한다고 생각한다. 특히 문자나 배열과 관련된 함수가 파이썬과는 비교도 안되게 많다.
정말 다양한 함수들이 있지만, 비슷한 형태(파라미터)로 대부분 사용이 가능하다. 또 함수명이 직관적이어서 어떤 기능일지 유추할 수도 있다.

나는 문제들을 풀면서 특히 reduce 함수를 잘 이해할 수 있게 되었다.
다른 사람들의 풀이와 또 그 반응들을 보면 사람들이 reduce 함수를 사용하는 것을 어렵게 생각하는 것 같다.
하지만 문제를 풀 때 reduce의 사용을 늘려가다 보면 점점 익숙해져가는 나 자신을 발견할 수 있다. (그리고 또 문제 설명만 읽어봐도 reduce를 사용하면 되겠구나 싶은 생각이 어렵지 않게 드는 문제들이 대부분이다.)
reduce 외에도 forEach는 중간에 break를 걸지 못한다거나, some과 같은 함수, Array를 동적으로 생성하는 방법, Map 자료구조 등을 새롭게 알게 되었다.

 

04.

쉬운 문제들이 대부분이지만, 간혹 특별히 더 생각이 필요한 문제들도 있다.
이런 문제들을 만나면 사실 반갑다.

특별한 이차원 배열 1

문제에 대해 간단하게 설명하자면 대각행렬을 만드는 문제이다.
처음에는 배열을 생성하고 초기화 할 때, 아래와 같이 코드를 작성했었다.

1
const result = new Array(n).fill(new Array(n).fill(0));

이후에 생성된 result을 순회하면서 index에 해당하는 원소만 1로 바꿔주려 했으나…
모든 원소가 1로 바뀌는 문제가 있었다.

거의 30분 가까이 이 문제로 고민을 했었는데, fill 함수에서 문제를 발견할 수 있었다.

Array.prototype.fill()의 value에 대한 설명

생성된 하나의 배열을 모든 요소가 참조하고 있었기 때문에, 순회하면서 값을 변경했을 때 모든 index의 요소가 바뀐 것이었다. 그래서 Array를 생성하고 순회하면서 각각의 배열을 추가해주도록 코드를 수정했다.

이 외에도 재미있는 문제들이 매일 한두문제씩 있다.

이게 왜 레벨 0일까

 

05.

매일 뭔가를 한다는 것은 사실 쉬운 일은 아니다. 하지만 프로그래머스는 정말 가볍게 접근할 수 있을 정도의 수준으로 문제들을 구성했다. 프로그래머스에 매일 접속해서 문제를 푸는 것이 부담스럽지 않고, 오히려 즐거운 경험이 되었다. (프로그래머스 광고 아닙니다.)

프로그래머스에 쉬운 문제만 있는 것은 아니다. 단지 난 시작을 코딩 기초 트레이닝으로 했을 뿐이다. 이제는 레벨 0에서 벗어나서 레벨 1이나 2같이 조금 더 깊게 생각해볼 필요가 있는 문제들을 풀어보려고 한다.

매일 한두줄이라도 코드를 작성하는 습관을 들이고 싶은 사람, 알고리즘 공부를 해보고 싶은데 어떻게 시작해야할지 막막한 사람들에게 추천하고 싶은 트레이닝이다.


추가(2023.11.23)
입문 문제도 모두 해결했다.

comments powered by Disqus