FrontEnd
[JS] N-Queen
이전에 파이썬으로 한번 풀어봤지만 JS로 오랜만에 다시만난 문제다. 먼저 N-Queen의 문제를 보면 결국 퀸은 세로줄이든 가로줄이든 하나씩밖에 못 둔다는것을 확인할 수 있다. 따라서 2차원 배열로 보드를 관리하는것이 아닌 1차원으로 관리할 수 있다. 예를들어서 [-1,-1,-1,-1] 왼쪽과 같이 처음을 배치하고 idx값을 세로줄이라고 생각해보자. 문제에서 정답으로 주어진 위상태를 1차원 배열로 표현한다면 [1,3,0,2] 가 되는것이다. 따라서 dfs를 활용해서 첫칸부터 채우는 문제로 바뀌게 된다. dfs를 통해서 퀸을 배치할때 세로줄은 위 방법으로 해결했다. 가로줄은 위 배열을 채우면서 같은 값이 나오지 않게 하면 해결할 수 있다. 만약 [1,2,2,3] 이렇게 중복된 값이 있다면 가로줄에서 곂치는..
[JS] N개의 최소공배수
유클리드 호제법을 활용한 최소공배수 구하는 방식으로 해결하였다. 간단하게만 설명하자면 24, 18 두개의 최소공배수를 구하기 위해서는 우선 최대공약수를 구해야한다. 24 % 18 => 6 18 % 6 = 0 이런방식으로 a % b = c b % c = d d % e = f ... 해서 나머지가 0일때까지 나눠주면 되는데 이때 0으로나올때의 마지막 값이 최대공약수이다. 최소공배수는 두자연소의 곱 * 최대공약수를 하면 나온다. function solution(arr) { const getGCD = (a,b) => { if (a%b===0) return b return getGCD(b,a%b) } const getLCM = (a,b) => a*b/getGCD(a,b) return arr.reduce((a,c)..
[JS] DeepDive(7) 연산자
연산자는 하나 이상의 표현식을 대상으로 산술,할당,비교,논리,타입,지수연산 등을 수행하여 하나의 값을 만든다. 이 과정에서 연산의 대상을 피연산자라고 하며 피연산자는 값으로 평가될 수 있는 표현식이어야한다. 산술 연산자 피연산자를 대상으로 수학적 계산을 진행하는 연산자로 연산이 불가능하면 NaN을 반환하는 것이 특징이다. 산술연산을 진행하면 항상 새로운 값을 만들게 된다. 종류로는 +,-,*,/,% 다섯가지가 존재한다. 단항 산술 연산자 1개의 피연산자를 가지는 산술연산자들을 의미한다. 산술연산자와 다르게 피연산자의 값을 변경하는 기능을 가진다. + 연산자는 숫자타입에 적용할대 어떠한 부수효과도 없다. 단 숫자가 아닌 연산자에 활용하면 숫자 타입으로 반환해준다. var x = '1'; console.lo..
[JS] DeepDive(6) 데이터 타입
데이터 타입은 값의 종류를 의미한다. 자바스크립트에서는 아래와 같은 7개의 타입을 제공한다. 숫자 타입 C나 자바같은 언어의 언어의 경우 double,float,int 등등 다양한 숫자 자료형을 제공하지만 JS는 독특하게 하나의 숫자타입만 가진다. 해당 숫자타입은 64비트 부동소수점 형식을 따른다. 즉, JS는 정수를 표현하는 별도의 데이터타입이 없다. var binary = 0b01000001;//2진수 var octal = 0o101; //8진수 var hex = 0x41; //16진수 // 표기법만 다를 뿐 모두 같은 값이다. console.log(binary); //65 console.log(octal); //65 console.log(hex); //65 console.log(binary === ..
[JS] DeepDive(5) 표현식과 문
값 이전시간에 변수에 대해 설명하면서 값이란 용어가 많이 나왔다. 그렇다면 값에 대한 정확한 정의는 무엇일까? 값이란 식이 평가되어 생성된 결과를 의미한다. 평가 ? 식을 해석해서 값을 생성하거나 참조하는 것 조금 쉽게 생각해보자. 10 + 20; //30 위 식이 진행되면 10+20이 아닌 그 결과인 30이 저장된다. 이게바로 값이다. 4장에서 모든 값은 메모리에 2진수 형태로 저장된다고 했다. 그렇다면 2진수를 숫자인지 문자인지 확인하는 방법이 필요하다. 값을 생성하는 방법중 가장 기본적인 방법인 리터럴에 대해 알아보자. 리터럴 사람이 이해할 수 있는 문자 또는 약속된 기호를 값을 생성하는 표기법 자바스크립트에는 위와 같은 리터럴이 존재한다. JS엔진은 런타임에 리터럴을 평가해 값을 생성한다. 표현식..
[JS] 배달
문제부터 다익스트라 알고리즘을 공부해보란 의도가 보이는 문제였다. 다익스트라 알고리즘이란 그래프,간선이 주어질 때 최소의 경로를 찾아낼 수 있는 알고리즘의 한 종류이다. 1. 간선의 정보를 저장하는 graph배열 생성 2. 1번노드부터 다른노드까지의 길이를 저장할 dp배열 생성 3. 방문한 노드인지 아닌지에 대한 정보를 저장할 visited배열 생성 4. 방문하지 않은 노드들 중에서 최소거리에 있는 노드를 선택 5. grpah배열을 활용해서 각 노드들간의 거리를 최신화 6. 해당 노드는 방문한 노드로 변경 7. 4~6을 모든 노드를 반복할때까지 반복 이후 filter함수를 활용해서 K보다 작은 것들의 개수만 세주었다. function solution(N, road, K) { const graph = ne..