Hash Table 해시 테이블해시 테이블은 키와 값을 함께 저장하는 자료구조 중 하나로, 데이터 검색이 빠른 자료구조이다. 해시 테이블은 키(Key), 해시 함수(Hash Function), 해시(Hash), 값(Value), 저장소(Bucket Slot)로 이루어져 있다. 키 Key키는 고유한 값이며, 해시 함수의 input이 된다. 이때 input되는 키는 해시 함수를 통해 해싱된 값으로 바뀌어 저장된다. Javascript의 Object와 Map은 키의 자료형의 차이가 있다. Object의 키는 오직 문자열과 심볼만으로 사용할 수 있지만, Map은 모든 데이터 타입을 키로 사용할 수 있다.아래에서 설명하겠지만, 값이 저장되는 버킷을 가르키는 인덱스로 사용된다. 값 Value값은 최종적으로 버킷..
분류 전체보기
문제https://school.programmers.co.kr/learn/courses/30/lessons/12927# 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제 접근 방법이번 문제는 (잔업)^2 들의 합이 최소값을 구하는 문제다. 이 문제를 보고 두가지 포인트를 잡았다. 첫 번째 정렬, 두 번째 최대값 활용 풀이 방법은 최대힙과 그리디를 이용한 값의 표준편차를 줄이는 풀이 두 가지가 있다. 물론 두 방법 모두 최대값과 나머지 값들을 비교해 표준편차를 줄이는 방법이다. 최대힙을 이용한 풀이우선 최대힙을 이용해 문제 풀이를 하기 전에 힙 Class를 ..
클로저는 함수와 그 함수가 선언된 렉시컬(정적)환경과의 조합이다. Javascript를 공부하며 이런 추상적인 말을 들어본 적이 있다. 오늘은 추상적으로 알고있던 클로저에 대해 정리하겠다. 1. 렉시컬 스코프자바스크립트 엔진은 함수를 어디에 정의했는지에 따라 상위 스코프가 결정 되며, 이를 렉시컬(정적) 스코프라 한다. 함수의 상위 스코프는 함수를 정의한 위치에 의해 정적으로 결정되고 변하지 않는다. 23장의 "실행 컨텍스트"에서 정리했듯이 스코프의 실체는 실행 컨텍스트의 렉시컬 환경이다. 이 렉시컬 환경은 자신의 "외부 렉시컬 환경에 대한 참조"를 통해 상위 렉시컬 환경과 연결된다. 이러한 연결이 스코프 체인이다. 함수의 상위 스코프를 결정하는 것은 렉시컬 환경의 외부 렉시컬 환경에 대한 참조에 저장할..
type과 interface는 타입스트립트에서 값의 타입을 지정하는 방법들이다. interface 형객체 구조를 정의할 때 사용되며 객체와 클래스의 타입을 정의할 때 사용된다.interface는 상속(extends)을 이용한 확장이 가능하며 다중 상속을 지원한다.interface Point { x: number; y: number;}interface Named { name: string;}interface Person extends Named { age: number;} 또한 이전 글에서 정리했듯이 interface에서 인덱스 시그니처를 이용하려면 명시적으로 선언해줘야 사용이 가능하다.export interface selectedStateInterface { position: { dueli..
문제https://www.acmicpc.net/problem/20056 풀이데이터 구조부터 확인하자. 우선 화염구가 들어갈 지도를 배열을 만들어준다.이때 각 위치에는 화염구의 데이터가 담긴 배열을 담을 수 있는 배열을 추가해준다.이렇게 한다면 위치별 화염구의 정보를 저장할 수 있다. 화염구의 방향은 0부터 7까지 12시 방향부터 10시 방향까지 정해진다.화염구가 진행할 방향을 dir 변수에 2차원 좌표에서의 백터를 저장해준다. 화염구는 한 구역에 여러개 존재할 수 있으며, 2개 이상의 화염구는 서로 합쳐지게된다.이후 4개의 화염구로 나눠지게 되는데, 이때 화염구의 질량, 속도, 방향이 변하게 된다. 질량은 모든 화염구의 질량을 더한 값을 5로 나누고 나머지는 버린 값이 된다.문제에 ⌊(합쳐진 파이어볼 ..
문제https://www.acmicpc.net/problem/16918 풀이이 문제를 처음 봤을 때는 4가지 경우가 반복되는 문제라고 생각해 구현을 해봤다.하지만, 통과가 되지 않았으므로 매 시간마다 변화를 주는 방식으로 풀이했다. 문제 풀이는 흠... 그냥 간단한 BFS 문제이다. 4방향의 상태를 체크하며 폭탄이 폭발한다. 코드const input = require('fs') .readFileSync(process.platform === 'linux' ? '/dev/stdin' : __dirname + '/example.txt') .toString().trim().split('\n').map(e => e.split(' '));const [r, c, n] = input.shift().map(Num..