2023. 10. 9. 12:19ㆍTrip to Algorithm
나는 자바스크립트로 코딩테스트를 푼다. 파이썬이나 C++에 비해서 풀기 불편하다고 하지만 프론트엔드에게는 자바스크립트만큼 중요한 언어는 없기 때문에 파이썬으로 초기에 풀었다가 자바스크립트로 변경하였다. 1년 전까지?만해도 프론트도 그냥 파이썬으로 푸는 사람들이 많았는데 우아한 코스인가? 거기서 코테를 js로 제한해서 뭔가 흐름이 크게 바뀐 듯하다. 여튼 돌아와서 간단한 코딩 문제들은 고차함수 혹은 배열 메서드로 해결이 가능하지만 입문을 막 떼고 조금만 난이도를 올리면 그 이상의 지식을 요구한다.
백준에서는 브론즈와 낮은 실버 문제를 풀며 실버 4까지 왔지만 처음으로 벽을 느낀게 백트래킹이었다. 그 다음 DFS, BFS로 넘어가면서 아 이거 그냥 머리로 풀면 안되겠다는 생각이 들었다. 물론 알고리즘 도움을 받기 위해 나동빈의 강의를 패캠에서 구매하였지만 그렇게 입문자에게는 그리 좋지 않은 강의라고 느꼈다. 너무 설명이 짧고 초보자 입장에서는 보다 상세한 설명이 필요하다고 느꼈는데 초보자 입장에서 모를만한 내용들을 넘어가버려 아쉬웠다. 특히 내가 벽을 느낀 부분이 DFS의 기본적인 재귀함수 부분인데 머리 속에서 그림이 안그려지다보니 도저히 문제를 풀 수 없었다. 아주 기초적인 문제부터 어려움을 느껴 큰 마음 먹고 다른 강의를 구매하기로했다. 사실 자바스크립트로 하는 알고리즘 강의가 없다보니 선택지가 거의 없었는데 김태원님의 강의를 인프런에서 구매했다. 예시 강의를 보니 내가 딱 어려워하는 재귀 함수 부분을 따로 강의로 파서 설명해주셔서 입문자를 고려한 강의임이 느껴져 마음이 기울었고 추가로 강의평도 좋았다.
지금 알고리즘 공부가 당장 취업에 도움이 되는 것은 아니지만 먼 훗날 빅테크 기업 코딩 테스트를 통과하는 날을 꿈꾸며 배워나가기로 한다.
오늘의 문제는 숫자 하나의 입력값을 받아서 순서대로 출력하는 것이었다. 문제 자체를 푸는 것은 어렵지 않지만 왜 재귀함수와 스택 프레임이 어떻게 작동하는지 충분히 설명을 해주셨다. 콜 스택과 실행 컨택스트 내용이 나오니 음...이렇게 생각하니 완전 초보자 강의는 아니다. 근데 알고리즘보다는 JS 동작 원리 이해가 먼저 이기에 알고리즘 자체만 보면 초보 강의다. JS 동작 원리 이해를 모르고 알고리즘 먼저 공부하는 것은 주객전도라고 생각하기에..!
아래는 내가 쓴 정답이다. 바로 로그를 찍을 수 있으나 계속 로그를 찍으면 백준에서 메모리 이슈가 나기에 이렇게 했는데 김태원님 문제는 백준이 아니라 바로 로그를 찍으셨다.
const input = require("fs").readFileSync("example.txt").toString();
const n = Number(input);
let ans = [];
const count = (num) => {
if (num <= 0) {
return;
}
ans.unshift(num);
count(--num);
};
count(n);
let answer = ans.join(" ");
console.log(answer);
복귀 주소와 대기하고 있다는 설명이 참 와닿았다. 과연 더 나아가서 DFS, BFS 정복까지 갈 수 있을지 궁금하다.
count(n);
let answer = ans.join(" ");
console.log(answer);
function solution(n) {
function DFS(L) {
if (L == 0) {
return;
}
DFS(L - 1);
console.log(L);
}
}
'Trip to Algorithm' 카테고리의 다른 글
[Algorithm] 합이 같은 부분집합(이진트리 DFS) (0) | 2023.10.10 |
---|---|
[Algorithm] 부분집합 구하기(이진트리 DFS) (0) | 2023.10.10 |
[Algorithm] 이진트리순회(DFS: 깊이우선탐색) (0) | 2023.10.09 |
[Algorithm] 이진수 출력(재귀) (1) | 2023.10.09 |
백트래킹이 이해가 잘 안되었다. (0) | 2023.10.01 |