ALL
[알고리즘] 백준 2480번: 주사위 세개 W_node.js
문제 https://www.acmicpc.net/problem/2480 2480번: 주사위 세개 1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다. 같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다. 같은 눈이 2개 www.acmicpc.net 풀이 // 백준 제출용 const readFileSyncAddress = '/dev/stdin'; // VSC 테스트용 // const readFileSyncAddress = 'input.txt'; const fs = require('fs'); let [a, b, c] = fs.readFileSync(readFileSyncAddress).toString().trim().spli..
[알고리즘] 백준 2525번: 오븐 시계 W_node.js
문제 2525번: 오븐 시계 첫째 줄에 종료되는 시각의 시와 분을 공백을 사이에 두고 출력한다. (단, 시는 0부터 23까지의 정수, 분은 0부터 59까지의 정수이다. 디지털 시계는 23시 59분에서 1분이 지나면 0시 0분이 된다.) www.acmicpc.net KOI 전자에서는 건강에 좋고 맛있는 훈제오리구이 요리를 간편하게 만드는 인공지능 오븐을 개발하려고 한다. 인공지능 오븐을 사용하는 방법은 적당한 양의 오리 훈제 재료를 인공지능 오븐에 넣으면 된다. 그러면 인공지능 오븐은 오븐구이가 끝나는 시간을 분 단위로 자동적으로 계산한다. 또한, KOI 전자의 인공지능 오븐 앞면에는 사용자에게 훈제오리구이 요리가 끝나는 시각을 알려 주는 디지털 시계가 있다. 훈제오리구이를 시작하는 시각과 오븐구이를 하는..
[JavaScript] 원시타입 vs 참조타입
데이터 타입 자바스크립트에서 데이터 타입은 변경 불가능한(immutable) 원시 타입과, 변경 가능한(mutable) 참조 타입으로 구분된다. 원시 타입은 콜스택 내의 실행컨텍스트에 저장되고, 참조 타입(객체)은 메모리 힙에 저장된다. 변수 식별자가 가리키는 메모리 주소에 저장된 값이 실제 값인지 혹은 참조할 메모리 주소인지에 따라 원시 타입과 참조 타입을 구분할 수 있다. 원시 타입 객체를 제외한 모든 타입의 값(Boolean, Null, Undefined, Number, String, Symbol, BigInt) 을 원시 타입 값이라고 한다. 한번 생성된 원시 값은 읽기 전용 값으로, 변경할 수 없다. let age = 30; let oldage = age; age = 31; // age === 3..
[알고리즘] 백준 2884번: 알람 시계 W_node.js
문제 2884번: 알람 시계 상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다. 상근이는 모든 방법을 동원해보았지만, www.acmicpc.net 상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다. 상근이는 모든 방법을 동원해보았지만, 조금만 더 자려는 마음은 그 어떤 것도 없앨 수가 없었다. 이런 상근이를 불쌍하게 보던, 창영이는 자신이 사용하는 방법을 추천해 주었다. 바로 "45분 일찍 알람 설정하기"이다. 이 방법은 단순하다. 원래 설정되어 있는 알람을 45분 앞서는 시간으로 바꾸는 것이다. 어차피 알람 소리..
[알고리즘] 모든 아나그램 찾기(해쉬, 투포인터, 슬라이딩 윈도우)
문제 S문자열에서 T문자열과 아나그램이 되는 S의 부분문자열의 개수를 구하는 프로그램을 작성하 세요. 아나그램 판별시 대소문자가 구분됩니다. 부분문자열은 연속된 문자열이어야 합니다. 입력설명 첫 줄에 첫 번째 S문자열이 입력되고, 두 번째 줄에 T문자열이 입력됩니다. S문자열의 길이는 10,000을 넘지 않으며, T문자열은 S문자열보다 길이가 작거나 같습니다. bacaAacba abc 풀이 function compareMaps(map1,map2){ // 두 map의 사이즈가 같은지 비교 if(!map1.size === map2.size) return false; // 두 map의 key, value 값이 같은지 확인 for(let [key,val] of map1){ if(!map2.has(key) || ..
[JavaScript] this keyword
this 함수 호출 시, 각각의 함수(실행컨텍스트)에 생성되는 특별한 값이다. 함수의 호출 방법에 따라 this의 값은 바뀐다. this는 고정된 값이 아니다. 호출 방식 this가 가리키는 값 객체 메소드 메소드를 호출하고 있는 객체 일반 함수 strict mode : undefined / sloopy mode : window 전역객체 화살표 함수 부모 스코프의 this 값 (화살표 함수는 자신만의 this 값을 가지지 않는다.) 이벤트 리스너 이벤트가 동작하고 있는 DOM element Example 객체 메소드 호출 const hyejung = { year : 1997, calcAge : function() { console.log(2022-this.year); } } //this -> hyejun..
[JavaScript] 호이스팅 & TDZ
호이스팅 변수/함수 선언 시점 이전에 그것에 접근할 수 있는 것. 선언이 마치 스코프의 상단으로 끌어올려진 것 같은 현상이다. 코드 실행 전, 자바스크립트 엔진이 코드를 스캔하고 코드 내의 변수, 함수 선언에 대한 정보를 실행컨텍스트에 기억한다. 이 때, 선언 TYPE에 따라 기억되는 정보가 달라진다. 따라서 호이스팅 결과도 다르게 나타난다. TYPE HOISTED? 초기값 스코프 함수 선언문 ✅ Actual function 블록(strict mode) var ✅ undefined 함수 let & const ❎ TDZ(uninitialized) 블록 함수 표현식/화살표 함수 var, let, const 선언 방식에 영향을 받는다. var 선언방식의 경우 선언과 동시에 초기화되므로, undefined의 값..
[알고리즘] 백준 11723번: 집합 (비트마스크) W_node.js
문제 11723번: 집합 첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다. www.acmicpc.net 비어있는 공집합 S가 주어졌을 때, 아래 연산을 수행하는 프로그램을 작성하시오. add x: S에 x를 추가한다. (1 ≤ x ≤ 20) S에 x가 이미 있는 경우에는 연산을 무시한다. remove x: S에서 x를 제거한다. (1 ≤ x ≤ 20) S에 x가 없는 경우에는 연산을 무시한다. check x: S에 x가 있으면 1을, 없으면 0을 출력한다. (1 ≤ x ≤ 20) toggle x: S에 x가 있으면 x를 제거하고, 없으면 x를 추가한다. (1 ≤ x ≤ 20) all: S를 {1..
[알고리즘] 비트마스크 Bit Mask
비트마스크 꺼져있다 = 0, 켜져있다 = 1 로 표현할 수 있는 2진수의 특성을 활용해 자료구조로 활용하는 기법. 비트를 마스킹처리하여 비트 연산을 활용해 2진 비트를 처리하는 작업이다. 장점 1. 수행 시간이 빠르다. 다른 자료구조에 비해 수행 시간이 빠르다. 비트 마스크 연산은 비트Bit 연산으로 O(1)로 동작한다. 2. 간결한 코드 다양한 집합 연산들을 비트연산자 한 줄로 작성할 수 있기 때문에 코드가 간결해진다. 3. 적은 메모리 사용량 2진수의 특성상 하나의 정수로 많은 경우의 수를 표현할 수 있기 때문에 메모리를 효율적으로 활용할 수 있다. 비트연산자 [JavaScript] 비트 연산 Bit Operation 비트연산자 비트(bit)단위, 즉 2진수 단위로 논리연산을 위해 사용하는 연산자 비..
[JavaScript] 비트 연산 Bit Operation
비트연산자 비트(bit)단위, 즉 2진수 단위로 논리연산을 위해 사용하는 연산자 비트 단위로 전체 비트를 오른쪽, 왼쪽 이동시킬 때에도 사용한다. 실행 과정 : 2진수 변환 → 비교(연산 실행) → 결과 반환(10진수) 비트연산자의 종류 a & b : AND 연산 대응되는 비트가 모두 1일 때 1을 반환한다. (둘 다 1이면 1, 아니라면 0을 반환) 1 & 3; // 1 = 0001(2) // 3 = 0011(2) --------------- // 0001(2) = 1 a | b : OR 연산 대응되는 비트 중 하나라도 1이면 1을 반환한다. (하나라도 1이면 1, 둘 다 0이면 0을 반환) 1 | 3; // 1 = 0001(2) // 3 = 0011(2) --------------- // 0011(2..