전체 글
[프로그래머스] Lv.2 N-queen (DFS) + 연습용 체스판
N-queen queen 을 겹치지 않게 놓는 문제이다. 시간복잡도는, 모든 row 에서 모든 column 에 대해 검사하므로, O(N^N) 이다. 풀이 코드 구조 queen 을 놓기 전에, 이전 queen 들의 위치와 비교하여 놓아도 되는지 검사한다. 되면 queen 을 놓는다 (함수 호출, DFS 탐색) 안되면 더 이상 함수호출을 하지 않는다 (끝 = 가지치기) 가지치기는 어떻게 되는가 check 함수에서 여기(newRow, newCol) 에 queen 을 놔도 되는지 검사를 한다. 이때 queen 을 놓아도 된다고 판단되면 계속해서 함수 호출을 하고 (DFS 탐색), queen 을 놓으면 안된다고 판단되면 거기서 끝낸다. 따라서 그 상태에서는 더 이상의 함수 호출이 없으므로, 가지치기가 된다. qu..
함수
들어가며 함수에 대한 내용입니다. 책 인사이드 자바스크립트(4.1~4.3)를 참고하였습니다. 함수의 정의 함수를 정의하는 방식에는 크게 세 가지 방식이 있다. 함수 선언문 함수 표현식 Function() 생성자 함수 그리고 1번과 2번은 함수 리터럴 방식 을 이용해서 선언된다. 3번은 말 그대로, Function() 생성자 함수 를 통해서 선언된다. 함수 리터럴 방식 리터럴이란, 선언함과 동시에 값 또는 코드를 지정해주는 것을 말한다. -참고1 함수 선언문 - 기명 함수 function fInit(a) { console.log(a); } 함수를 선언할 때 이름이 꼭 있어야(기명) 한다. 그리고 선언문 이기 때문에 호이스팅이 일어날 수 있다. 때문에 코드 구성을 엉성하게 만들 수 있어서, 되도록이면 선언문..
Outlet 을 사용하여 Navigation 구현하기 (react-router-dom)
Outlet 이란 공식 문서에서 가져왔다. An should be used in parent route elements to render their child route elements. This allows nested UI to show up when child routes are rendered. If the parent route matched exactly, it will render a child index route or nothing if there is no index route. // 부모 컴포넌트 const router = createBrowserRouter([ { path: "/", element: , errorElement: , children: [ { path: "contacts..
Closure
들어가며 클로저에 관한 내용입니다. 개념 위주로 작성하였습니다. Closure 책과 여러 자료를 보고 정리 해봤을 때, 클로저는 아래와 같은 개념을 말한다고 나름의 정리를 해봤다. 클로저는 함수 자신과 함수 자신이 선언된 어휘적 환경을 기억하고 있다. 따라서 생명주기가 끝난 외부 함수의 변수를 스코프 체인 을 통해서 참조 를 할 수 있다. 코드를 보자. function outerFunc() { // 외부 함수 var x = 10; function innerFunc() { console.log(x); } return innerFunc; } var inner = outerFunc(); inner(); // 10 ffInner = fOuter() 를 했을 때, fOuter()의 execution context..
Scope
Scope 스코프는 흔히, 변수의 생존 범위 라고 알고 있다. 나 또한 그렇게만 생각하고 있었다. 물론 이 말이 마냥 틀린것은 아니지만, 스코프는 보다 넓은 개념을 포함하는 단어이다. 그래서 스코프를 알기 전에, 자바스크립트 프로그램이 어떻게 작동하는지를 먼저 볼것이다. 자바스크립트 프로그램은 어떻게 실행될까? 자바스크립트 프로그램은 Engine, Compiler, Scope에 의해 실행된다. (보다 정확하게는 엔진에 의해 실행되지만, 컴파일러와 스코프는 엔진의 명령에 따라 각기 맡은 일을 하기 때문에, 각각에 의해 실행된다는 것도 마냥 틀리지만은 않다고 생각한다) Engine Compilation의 전 과정과 자바스크립트 프로그램 실행의 전 과정을 담당한다. (우리가 흔히 아는 V8은 자바스크립트의 다..
실행 컨텍스트 (Execution Context)
들어가며 지난 JavaScript, Front-End 발표 주제는 this 였지만, 공부하다 보니 실행 컨텍스트에 대한 내용이 선행되야 할 것 같아 실행 컨텍스트에 대하여 발표를 하게 되었다. 여러 자료와 책을 참고하며 공부를 하고 있음에도 내용이 잘 와닿지 않아 참고1을 참고2, 참고3, 참고4, 책 인사이드 자바스크립트, Poiema Web을 참고하여 번역을 해보고자 한다. 추가적으로 내가 여러 자료를 찾아보면서 알게 된 내용들도 덧붙일 것이다. 실행 컨텍스트, Execution Context(이하 EC) 라는 개념은 나에겐 낯설었기에 나와 같은 사람들이 있을 것 같아 흔히들 아는 콜스택 을 시작으로 글을 써보도록 하겠다. Call Stack과 EC var x = 'xxx'; function foo ..
JITC, Adaptive-JITC
들어가며 자바스크립트는 컴파일 언어인가요, 인터프리터 언어인가요? 라는 내용을 검색하면 종종 보이는 단어가 있다. 바로 JITC (Just-In-Time Compiler) 라는 단어인데, 같이 나오는 내용인 즉 JITC는 인터프리팅을 하다가, 필요한 부분에 대해서는 컴파일을 하여 최적화를 한다 이다. 이 말은 내용은 맞지만 이름이 틀렸다. 위의 방식은 Adaptive JITC 라고 하여, 최근 대다수의 JavaScript 엔진들이 차용하는 방식이다. 그리고 JITC 는 과거의 JavaScript 엔진들이 차용하던 방식이다. 그렇다면 JITC와 Adaptive JITC는 무엇이고, 이들의 차이점은 무엇인지 알아보자. JITC JITC는, 위에서 언급했듯이 인터프리터 언어와 달리 bytecode를 nativ..
옵티마이저가 SQL 을 어떻게 처리하는가
옵티마이저가 SQL 을 어떻게 처리하는가 Database 에서 찾을게 있다면 (= 질의할 것이 있다면), SQL 로 찾는다 질의 = 물어봐서 답을 찾아내는 것 SQL SQL 이란? 구조적 structured 이고, 선언적 declarative 이고, 집합적인 set-based 질의 언어 구조적, 선언적, 집합적의 의미가 무엇일까? (1) 구조적 의 의미 structured SQL 의 원래 이름은 SEQUEL (Structured English QUEry Language) 이었는데, 지금은 저작권 이슈로 사용을 못한다고 한다. (그래서인지 SQL 을 시퀄로 읽는 경우를 종종 볼 수 있다) 여기서 구조적이라는 의미는 (구조적인) 영어 문법을 의미한다고 한다. 그래서 실제로 SQL 은 영어를 아주 조금이라도 ..