전체 글

생각정리

    프로그래머스: 불량 사용자(JS, backtracking) feat. 현대캐피탈 2024 상반기 공개채용

    알고리즘을 하도 오랜만에 풀었더니 백트래킹이라는 알고리즘을 까먹었어서 되새길겸 쓰는 글이다.문제는 간단하다. 불량 사용자 배열의 원소들이 각각 가능한 경우의 수를 구하고 이 중 중복이 존재할 수 있고, 불량 사용자 배열의 길이 및 사용자 아이디 배열의 길이가 8이하로 매우 작으니 백트래킹을 이용해 가능한 모든 경우의 수를 구하면 된다. 백트래킹을 사용하는 이유는 매번 빈 배열을 dfs에 넣어야하기 때문이다. 현대 캐피탈 2024 상반기 공채 3번이 딱 이런 문제였는데 난 그때 백트래킹을 생각을 못해서 재귀함수의 depth가 0일때 재귀함수 안에서 빈 배열을 생성하여 그 배열에 원소를 넣고 재귀함수에 다시 prop으로 넣는 방식으로 풀었었다. 참고로 1번은 구현, 2번은 그래프탐색(BFS사용), 3번은 백..

    프로그래머스: 단속카메라(javascript, greedy)

    프로그래머스: 단속카메라(javascript, greedy)

    문제는 쉬우나 처음 접근을 잘못해 헤맨 문제이다. 이전에 호텔방 예약하는 문제와 비슷하여 시작 시간과 끝시간만 비교했으나 다음 차의 범위가 이전 차의 범위안에 들더라도 비교가 계속 되면 과거 차들의 정보가 반영이 안되는 문제를 고려 안했다. 그 부분을 수정하기 위해 시작 시간과 끝 시간을 계속 변경 시키는 알고리즘을 추가하여 문제풀이에 성공하였다. greedy algorithm은 떠올리기는 쉬우나 그것이 절대해인지 증명하는 것이 매우 어려워 사실상 운에 맡기거나 반례를 열심히 생각해내야 한다.. function solution(routes) { let answer = 0; routes.sort((a,b)=>a[0]-b[0]) let start = 30001 let end = -30001 routes.fo..

    [JS] Javascript의 프로토타입과 상속: 개념과 동작 이해

    [JS] Javascript의 프로토타입과 상속: 개념과 동작 이해

    서론 Javascript에서 객체 상속은 prototype을 이용해 이루어진다. prototype은 엄밀히 말하면 전통적인 상속이 아닌 참조 메커니즘으로 작동한다. prototype 언어의 특성상, 대부분의 구성요소가 객체로 취급되며, 이는 함수, 배열, 심지어 기본 자료형까지 포함한다. ES6에서 도입된 클래스 문법은 prototype 기반의 동작을 더욱 쉽게 만드는 문법적인 설탕이다. 따라서, prototype을 이해하는 것은 자바스크립트를 효과적으로 다루는 데 중요하다. 본 글에서는 prototype과 prototype 체인의 개념 그리고 생성자 함수에 대해 설명하고자 한다. 이를 통해 자바스크립트의 객체 지향적 접근 방식을 더 깊이 이해할 수 있길 바란다.프로토타입과 프로토타입 체인 prototy..

    [JS] Javascript에서의 Closures

    클로저란 클로저는 외부 함수에서 선언된 변수를 참조하는 내부 함수에서만 발생하는 현상이다. MDN에선 클로저를 "함수와 그 함수가 선언된 Lexical Environment의 조합"라 정의한다. Lexical Environment는 함수가 선언될 당시의 모든 지역 변수를 포함한다. 선언된 당시의 Lexical Environment이란 실행 컨텍스트의 구성 요소 중 하나인 outerEnvironmentReference를 포함하여 변수의 유효 범위(스코프)를 결정하고 스코프 체인을 형성하는 데 영향을 끼친다. JavaScript에서 클로저는 함수 생성 시 함수가 생성될 때마다 생성된다. 클로저의 범위 클로저는 어휘적 범위 지정, 즉 함수가 선언될 때의 변수 범위에 바인딩되는 특성을 가지고 있다. 예를 들어,..

    [JS] Javascript에서의 this

    서론  다른 객체지향 언어들과는 달리, 자바스크립트에서 this는 클래스 외에도 다양한 상황에서 사용된다. 이는 때로는 혼란을 야기할 수 있다. this는 기본적으로 실행 컨텍스트가 만들어질 때 결정되며, 함수 호출 시에 결정된다. 실행 중에는 이를 할당으로 변경할 수 없다.다양한 상황에서의 this전역 문맥  전역 공간에서 this는 전역 객체를 가르킨다. 예를 들어, 브라우저에서는 window, Node.js에서는 global이 전역 객체가 된다. 전역 공간에서 변수 a에 1을 할당하면 window.a와 this.a 모두 1이 출력된다. 이는 전역 변수가 사실 전역 객체의 프로퍼티로 동작하기 때문이다.var a = 1;console.log(a); // 1console.log(window.a); // ..

    Recoil 사용이유와 사용방법

    Recoil 사용이유와 사용방법

    서론 비즈니스 모델의 복잡성이 증가함에 따라 프론트엔드 개발에서 처리하는 데이터의 양과 복잡도도 더욱 커지고 있다. 사용자와 상호작용하는 뷰는 점차 더 많은 액션을 포함하게 되고, 데이터베이스에서 데이터를 가져오는 횟수와 데이터의 크기도 증가하고 있다. 이러한 환경에서 데이터를 효율적으로 관리하는 것은 필수적이다. 실제로 프론트엔드 개발자라는 직군이 등장한 배경도 이러한 필요성에서 비롯된 것이라고 본다. 이 글에서는 프론트엔드 개발에서 데이터를 효율적으로 관리하는 데 도움을 주는 상태 관리 라이브러리 중 하나인 Recoil의 사용 이유와 기본적인 사용 방법에 대해 살펴보겠다. 왜 Recoil인가 상태 관리 라이브러리를 사용해야 하는 이유는 앞에서 간략하게 설명하였다. 상태 관리 라이브러리에는 redux,..

    상태 관리 라이브러리 비교: Redux vs Justand vs Recoil

    상태 관리 라이브러리 비교: Redux vs Justand vs Recoil

    서론 요즘 프론트엔드 개발은 비즈니스 로직이 복잡해짐에 따라 상태 관리가 점점 어려워지고 있다. 코드에서 사용하는 상태들이 많아지면서, 상태 관리는 더욱 중요해졌다. 상태들을 관리하고 어떤 상태 변화가 다른 상태 변화를 일으키는지 예측하는 게 어려워지고 있어, 이 글에서는 개인 프로젝트를 진행하며 상태 관리 라이브러리들을 선택할 때 영향을 미쳤던 요인들을 비교하고 정리해보겟다.Flux vs Atom 상태 관리 라이브러리들은 프론트엔드 개발에서 필수적인 부분이 되었다. 이들 중 대부분은 Flux 패턴이나 Atomic 방식으로 구현되어 있다. Proxy 기반의 발티오도 있지만, 대체로 개발자들은 Flux와 Atomic 중 하나를 선택한다. Flux 패턴은 top-down 방식을 따른다. 이는 데이터의 흐름이..

    [JS] 반복문 대신 고차함수를 쓰는 이유

    서론 처음 자바스크립트에 입문할 때는 파이썬에서 했던 것처럼 반복문을 주로 썼었다. 그러다 다른 사람들의 코드를 보며 반복문이 거의 존재하지 않고 대신 map, filter, reduce같은 고차함수를 주로 사용함을 알 수 있었다. 이 글에서는 자바스크립트에서 반복문 대신 고차함수를 써야하는 이유에 대해 알아보고자 한다.고차함수란 고차 함수는 다른 함수를 매개변수로 받거나 함수를 결과로 반환하는 함수이다. 고차 함수는 수학에서 쓰이는 개념이며 자바스크립트에서 고차함수에는 map, reduce, filter같은 함수가 있다. 자바스크립트에서 함수는 일급 객체로 변수에 할당되고 인수에 전달될 수 있고 다른 함수들의 return값으로 쓰일 수 있다. 고차함수는 외부 상태의 변경이나 가변 데이터를 피하고, 불변..