💡 처음에 '2차원 배열이 대체 뭐지' 하고 고민하는데 시간을 많이 썼다. 즉, 문제 이해하는데 시간을 많이 썼다는 뜻이다. 코드자체는 굉장히 쉬운 편에 속한다. 입출력의 board를 이해했다면 더 빠르게 풀었을 것 같다. 2차원 배열과 board가 대체 무엇인지 이해하고, 시각적으로 보면서 할 수 있게 잘 쌓아두는 것이 풀이의 핵심이다. 알고리즘 문제를 풀 때는 그냥 머릿속으로 상상하면서 풀기보다는 요구사항을 적으면서 푸는 것이 좋은 습관이 될 것 같다. // 입출력 예 // board // [[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]] // 제한사항: board 배열은 2차원 배열로.... => 2차원 배열. 평면에서 배열 하나가 위에서..
Coding
💡 제가 기존에 잘 알지 못 했던 ES5와 달라진 ES6문법 몇 가지를 정리해두었습니다. ES6 신문법 전체를 다루는 것이 아닙니다. let , const 이런 내용은 글에서 다루지 않습니다. 0. ES가 대체 뭔가? 💡 ES란 ECMA Script의 약자입니다. 자바스크립트는 1990년대 Netscape 회사의 Brendan Eich 라는 사람에 의해 최초 개발되었습니다. 자바스크립트가 잘 되자, MS에서 Jscript라는 언어를 개발해 IE에 탑재하였는데, 이 두 스크립트가 너무 제각각이라, 표준이 필요하게 되었습니다. 이 표준을 위해 자바스크립트를 ECMA(European Computer Manufactures Association)라는 정보와 통신시스템의 비영리 표준 기구에 제출하였고 표준에 대한..

🎈 이진법, 삼진법 변환하는 쉬운 방법을 알게 되었다. 1. 문제 ✔ 내가 푸는 데 사용한 규칙 [이진법] 9를 이진법으로 표현하는 방법 9 / 2 = 몫 4 나머지 1 4(몫) / 2 = 몫 2 나머지 0 2 / 2 = 몫 1 나머지 0 1 / 2 = 몫 0 나머지 1 뒤집어서 나열하면, 1001 (2) = 9 (10) [삼진법] 45를 삼진법으로 표현하는 방법 45 / 3 = 몫 15 나머지 0 15 / 3 = 몫 5 나머지 0 5 / 3 = 몫 1 나머지 2 1 / 3 = 몫 0 나머지 1 뒤집어서 나열하면, 1200 (3) = 45 (10) ✔ 위의 규칙을 사용해서 n을 계속 나누면서 3보다 작은지 아닌지 조건을 줘서 break를 통해 결과를 도출했다. ✔ 단, 들어오는 n의 값이 처음부터 3보다..
💡 앞에서 배운 javascript 문법보다 쉬운 편에 속한다. 왜냐하면 이미 렉시컬 환경과 스코프(식별자에 대한 유효범위)에 대해서 알고 있다면 이해가 쉽기 때문이다. 렉시컬 스코프와 클로저를 연달아서 이해하는 것이 좋다. 1. 렉시컬 스코프와 클로저 (1) 렉시컬 스코프 ✔ 렉시컬 스코프의 개념 JS엔진은 함수를 어디서 ‘호출했는지’가 아니라 함수를 어디에 ‘정의했는지’에 따라 상위 스코프를 결정한다. 다시 말하면, “외부 렉시컬 환경에 대한 참조”에 저장할 참조값, 즉, 스코프는 함수를 호출할 때가 아니라 함수를 어디서 선언했는지에 따라 결정된다. 스코프에 대한 참조는 함수 정의가 평가되는 시점에 함수가 정의된 환경(위치)에 의해 결정된다는 뜻이다. 이것이 바로 '렉시컬 스코프'다. 스코프에 대한 ..

💡 알고 있던 개념이긴 하지만 알고리즘 문제를 풀다가 parseInt()가 문자타입 지수형태를 거른다는 것을 처음 알게 되어서 다시 정리해야겠다는 생각이 들어서 적어둔다. Number와 parseInt 중에서 아무거나 썼는데 잘 골라서 써야겠다. 1. Number() 얘는 그냥 문자(지수 e 제외)가 보이면 NaN 출력한다. ✔ 지수 형태도 잘 계산해서 출력해준다. ✔ Number는 사실 크게 주의할 점은 없고, Number를 사용한 대상은 아무리 변환이 되지 않은 NaN이 출력되는 문자더라도 일단 typeof를 사용하면 number 타입으로 나온다는 것이다. ✔ isNaN을 써서 거르도록 하자. let string = "hi there" let num = "12345" let numStart = "12..

콜백 함수, 함수 내 화살표 함수의 this를 공부하다가 헷갈려서 검색하여 정리해 보았습니다. 보고나면 이해가 되는데 시간이 지나 헷갈리면 자주 보도록 해야겠습니다. 명시적 바인딩까지 포함하여 정리 다시 한 최신 🔗링크 자바스크립트 this에 대해서 간단하게만 보는 것이 목적이면 이 글을 읽으면 됩니다. 1. this와 실행 문맥 ⚪ 자바스크립트 엔진을 프로그램이 실행을 하면 모든 실행 가능한 코드를 평가해서 ✔ '실행 문맥' 이라는 것을 만듦. ⚪ 이 때 실행 가능한 코드란 전역코드, 함수 코드, eval 코드가 있음. 각각의 실행 가능한 코드별로 실행 문맥이 하나씩 만들어짐. ⚪ 실행 문맥은 렉시컬 환경 컴포넌트, 디스 바인딩 컴포넌트 등 실제 실행에 필요한 컴포넌트들로 이루어져 있는데, 여기에 있는..

개요 실행 컨텍스트는 자바스크립트의 동작원리를 담고 있는 핵심 개념이다. 실행 컨텍스트를 바르게 이해하면 자바스크립트가 스코프를 기반으로 식별자와 식별자에 바인딩된 값(식별자 바인딩)을 관리하는 방식과 호이스팅이 발생하는 이유, 클로저의 동작 방식, 그리고 태스크 큐와 함께 동작하는 이벤트 핸들러와 비동기 처리의 동작 방식을 이해할 수 있다. 1. 소스 코드의 타입 ECMAScript 사양은 소스코드(ECMAScript code)를 4가지 타입으로 구분한다. 4가지 타입의 소스코드는 실행 컨텍스트를 생성한다. 소스코드의 타입 설명 전역 코드(global code) 전역에 존재하는 소스코드를 말한다. 전역에 정의된 함수, 클래스 등의 내부 코드는 포함되지 않는다. 함수 코드(function code) 함수..

TL;DR 변수는 값을 저장하기 위해 확보한 메모리 공간 그 자체를 의미하거나 그 메모리 공간을 식별하기 위해서 붙인 이름이다. 식별자는 메모리 주소에 붙인 이름이다. 모든 식별자(변수 이름, 함수 이름, 클래스 이름 등)는 값이 담긴 메모리를 가리키는 메모리 주소와 매핑 관계에 있다. 의미상 비슷한 느낌이 강해서 둘이 서로 혼용하는 경우를 많이 볼 수 있다. 1. 변수 변수는 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 메모리 공간을 식별하기 위해 붙인 이름을 말한다. 값의 위치를 가리키는 상징적인 이름 상징적 이름인 변수는 프로그래밍 언어의 컴파일러 또는 인터프리터에 의해 값이 저장된 메모리 공간의 주소로 치환되어 실행된다. 따라서 개발자가 직접 메모리 주소를 통해 값을 저장하고 참조할 ..

개요 변수는 자신이 선언된 위치에 의해 자신이 유효한 범위, 즉 다른 코드가 변수 자신을 참조할 수 있는 범위가 결정된다. 변수뿐만 아니라 모든 식별자가 그렇다. 다시 말해, 모든 식별자(변수 이름, 함수 이름, 클래스 이름 등)는 자신이 선언된 위치에 의해 다른 코드가 식별자 자신을 참조할 수 있는 유효 범위가 결정된다. 이를 스코프라 한다. 즉, 스코프는 식별자가 유효한 범위를 말한다. 자바스크립트 엔진은 코드를 실행할 때 코드의 문맥을 고려한다. 코드가 어디서 실행되며 주변에 어떤 코드가 있는지에 따라 아래 예제의 ①과 ②처럼 동일한 코드도 다른 결과를 만들어 낸다. var x = 'global'; function foo(){ var x = 'local'; console.log(x); // ① } ..
알고 있지만 쉽게 잊거나 익숙하지 않은 것들은 계속 적어보며 익숙해져보려고 한다. 1. 각종 타입 console.log(typeof 123); // "number" console.log(typeof "123"); // "string" console.log(typeof true); // "boolean" console.log(typeof undefined); // "undefined" console.log(typeof null); // "object" console.log(typeof " "); // "string" console.log(typeof ""); // "string" console.log(typeof {}); // "object" console.log(typeof []); // "object"..