FrontEnd

    [JS] 주식 가격

    배열의 길이가 10만개나 되기 때문에 이중 반복문을 활용하면 시간초과가 걸릴 것 같은 문제였다. 처음에 조금 고민을 하다가. 결국 내려갔는지 올라갔는지 스택을 활용하면 조금 더 쉽게 판별할 수 있을거란 생각이 들었다. 반복문을 통해서 i가 시간이라고 생각을 했다. 만약 스택에 값을 집어넣어야할때 그당시의 i값을 같이 스택에 넣는다면, 이후에 값이 떨어졌다고 판단될때 의 i값과 스택에 넣었을때의 i값을 비교한다면 몇초만에 값이 떨어진지 확인할 수 있다. 또한 스택에 넣을때 i값을 기록하기에 정답 배열에 값을 넣는것도 수월했다. 미리 prices길이만큼 0으로찬 배열을 만들고 그 배열에서 값을 넣는식으로 식을 세웠다. function solution(prices) { const stk = [] const r..

    [JS] 더 맵게!

    생각보다 되게 오래 헤맨 문제였다... 원인은 별거 아니었지만 우선 문제분류도 그렇고 내용도 그렇고 내놓고 최소힙을 구현해보란 문제였다. 딱히 최대,최소 힙 라이브러리가 없는 JS 특성상 힙을 직접 구현해보았다. 내가 실수한점은 두곳이었다. 첫번째로 문제를 제대로 안읽은 게 잘못이었다. 스코빌 지수가 다 섞어도 원하는 스코빌 지수가 안나오는 경우가 있는데 해당 경우를 다 무시해버렸었다.. 추가적으로 스코빌 이상인지 초과인지 제대로 파악을 안했어서 테스트 케이스가 잘 통과가 안되었었다. 문제를 파악을 제대로 못했는데 애꿏은 힙부분만 계속 건드렸으니 ㅠㅠ 힙 부분에서 실수한 곳은 한 점이었다. [1,1] , 3 이렇게 테스트 케이스를 넣으면 답이 정상적으로 나오지 않았다. 힙 안의 값이 1개밖에 없다면 그냥..

    [JS] DeepDive(10) 객체 리터럴

    자바스크립트는 객체 기반의 프로그래밍 언어이다. JS를 구성하는 거의 모든 것이 객체인데, 실제로 원시값을 제외한 나머지 값들은 모두 객체이다. 객체는 0개 이상의 프로퍼티로 구성된 집합이며 key와 value로 구성되어 있다. var person = { name: "정민규", //프로퍼티 age : "26", //프로퍼티 }; 특히 JS의 함수는 일급 객체이므로 값으로 취급할 수 있다. 함수를 프로퍼티 값으로 사용할 수 있다는 말이며 해당 경우 일반 함수와 구분하기 위해서 메서드 라고 칭한다. var counter = { num: 0, increase: function() { this.num++; } }; 위 코드에서 increase가 메서드가 된다. JS에서 함수와 객체는 밀접한 관계를 가진다. 함수..

    [JS] DeepDive(9) 타입 변환과 단축 평가

    타입 변환 자바스크립트의 모든 값에는 타입이 존재하며 개발자의 의도 혹은 JS엔진에 의해서 타입이 변환되곤 한다. 개발자의 의도에 따라 타입이 변환되는걸 명시적 타입변환이라하며 JS 엔진이 변하게 해주는 걸 암묵적 타입 변환이라고 한다. var str = x + "" //암묵적 형 변환 JS에서는 빈 문자열을 더하면 자동으로 문자열로 변하는 특성이 있는데 이러한 암묵적 형 변환을 잘 이해하고 있는 개발자라면 (10).toString() 보다 10 + '' 코드가 더 간결해 보일 수 있다. 중요한건 코드를 예측할 수 있어야한다는 것이다. 동료의 코드를 정확히 이해할 수 있기 위해서라도 타입변환에 대해서 자세하게 알아보자. 문자열 타입 변환 각 타입들이 방금 살펴본 + "" 을 적용하였을때 어떤 식으로 변환..

    [JS] DeepDive(8) 제어문

    제어문이란 조건에 따라서 코드블록을 실행하거나 반복실행하는 문을 말한다. 제어문을 활용하면 코드의 실행흐름을 위에서부터 아래로 내려가는 자연스러운 흐름을 인의적으로 바꿀 수 있기 때문에 제어문의 남용은 코드의 가독성을 해치게 된다. 따라서 이후에 forEach,map,filter과 같은 고차함수로 제어문의 사용을 덜 쓰는 방향이 좋다. 사실 이번 장은 대부분 아는 내용이라 핵심만 짚고 넘어가도록 할 것 같다. ( JS 문법 글에서 자세히 적어두었다 ) 블록문 이전에 잠깐 설명했던 블록문은 0개 이상의 문을 중괄호로 묶은 것으로 코드블록 혹은 블록이라고 부른다. 조건문 주어진 조건에 따라 코드블록을 실행하게 된다. if...else if .... else 문이 일반적이다. if(조건식1){ // 참 실행문..

    [JS] 하노이의 탑

    재귀함수를 활용해서 풀 수 있다. 조금 쉽게 생각해보자. 10개의 하노이의 탑을 옮긴다고 해도 맨 마지막 원판과 나머지 9개의 원판으로 나눌 수 있다. 만약 1번에서 3번까지 옮기고 싶다면 9개의 원판 한덩이를 1->2로 옮기고 마지막 원판을 1->3으로 옮기고 9개의 원판 한덩이를 2->3으로 옮기면 된다. 그런데 9개의 원판을 1-> 2로 만드는건 또 8개짜리 원판과 맨 마지막 원판을 옮기는 문제로 축소시킬 수 있다. 이런 성질을 활용해서 아래와 같이 재귀를 활용할 수 있다. function solution(n) { const ret = [] const dfs = (n,s,e) => { if (n===0) return const rest = [1,2,3].filter(v => v!==s && v!==..