본문 바로가기

JavaScript56

JavaScript 실행컨텍스트(Execution Context) 이해하기 Execution Context(실행 컨텍스트)란 실행할 코드에 제공할 환경 정보들을 모아놓은 객체이다.자바스크립트는 동일한 환경에 있는 환경 정보들을 모은 실행 컨텍스트를 콜스택에 쌓아 올린 후 실행하며 코드의 환경과 순서를 보장스택은 LIFO(Last In, First Out)의 구조로 마지막에 들어온 정보를 가장 먼저 접근한다.한다.여기서 환경이란 전역공간 또는 함수 내부의 환경이 될 수 있다. ✅ 예제var temp = 'temp'; function b (){ console.log('안녕하세용');} function a (){ b();} a();  (1) 콜스택에는 전역 컨텍스트말고 다른 컨텍스트는 없기 떄문에 전역 컨텍스트와 관련된 코드를 진행한다.(2) 전역 컨텍스트와 관련된 코드를 진행 .. 2025. 2. 28.
(퀵/병합) 정렬 개념 정리 정렬의 종류1. 버블 정렬 (Bubble Sort)가장 기초적인 정렬시간복잡도: O(n²)구현이 쉽지만 비효율적 2. 선택 정렬 (Seletion Sort)가장 작은/큰 원소를 선택해서 정렬시간복잡도: O(n²)버블정렬보다 실제 교환 횟수가 적음3. 삽입 정렬 (Insertion Sort)작은 데이터셋에서 효율적시간복잡도: O(n²)거의 정렬된 데이터에서 매우 효율적4. 퀵 정렬 (Quick Sort)실제로 가장 많이 사용되는 정렬평균 시간복잡도: O(nlogn)분할 정복 방식5. 병합 정렬 (Merge Sort)안정적인 정렬 알고리즘시간복잡도: O(nlogn)추가 메모리 공간 필요퀵 정렬과 병합 졍렬을 학습하면 좋은 점분할 정복(Divide and Conquer) 패러다임의 대표적인 예시재귀적 문제 해.. 2025. 1. 8.
힙 개념 정리 힙이란?완전 이진 트리 형태의 자료구조이다.우선순위가 있는 데이터를 저장하고 관리하는  특별한 트리다. 완전 이진 트리란?모든 레벨이 왼쪽부터 차례대로 채워진다.마지막 레벨을 제외한 모든 레벨이 완전히 채워져 있어야 한다.앞 줄부터 왼쪽에서 오른쪽에서 차례대로 앉은 것처럼, 노드들이 순서대로 채워진다.   힙의 종류최대 힙: 부모 노드가 자식 노드보다 항상 큰 힙 자료구조 (부모 > 자식)최소 힙: 부모 노드가 자식 노드보다 항상 작은 힙 자료구조 (부모 힙의 특징항상 완전 이진 트리 형태를 유지부모 - 자식 간의 대소 관계만 중요(형제 노드 간의 관계는 상관 없음)배열로 구현하면 쉽게 관리 가능최소 힙 예시// 배열[0, 1, 2, 3, 4, 5, 6]// 배열 -> 힙 변환 그림 0 .. 2025. 1. 7.
해시 개념 이해하기 해시 자료구조란?데이터를 효율적으로 저장하고 검색하기 위한 데이터 구조로 주로 키-값 쌍으로 데이터를 저장한다. ex) Object, Map 객체 등키를 해시 함수에 입력하여 해시 값을 얻고, 이 해시 값을 통해 데이터를 저장하거나 검색한다.마치 도서관에서 원하는 책을 찾을 때 도서 분류 번호로 찾으면 빠르게 찾을 수 있는 원리와 같다. 예시//간단한 해시 테이블 구현class SimpleHashTable { constructor() { this.table = {}; } //데이터 저장하기 set(key, value) { this.table[key] = value; } //데이터 가져오기 get(key) { return this.table[key]; }}//사용 예시const phoneBook .. 2025. 1. 6.
[프로그래머스 Lv.1] 문자열 나누기 function solution(s) { let answer = 0; // 분리된 문자열 개수 let aCount = 0; // 첫 글자(x)의 개수 let bCount = 0; // 첫 글자가 아닌 글자의 개수 for (let i = 0; i 2025. 1. 4.
[프로그래머스][스택/큐] 올바른 괄호, 프로세스 javascript 스택은 LIFO: Last in First out 방식으로 마지막 들어온 데이터에 가장 먼저 접근한다.function solution(s){ const answer = []; for(let i=0; i 큐는 FIFO: First in First out 방식으로 먼저 들어온 데이터에 가장 먼저 접근한다.function solution(priorities, location) { let answer = 0; // priorities 배열의 각 프로세스에 대해 { priority, index } 형태로 객체 배열을 만듦 // 이렇게 하면 우선순위와 해당 프로세스의 원래 위치를 추적할 수 있음 const queue = priorities.map((priority, index.. 2024. 12. 14.
[프로그래머스 Lv.1] 로또의 최고 순위와 최저 순위 function solution(lottos, win_nums) { // 0의 개수와 일치하는 숫자 개수 계산 const zeroCount = lottos.filter(num => num === 0).length; const matchCount = lottos.filter(num => win_nums.includes(num)).length; // 순위를 계산 const getRank = (count) => (count >= 2 ? 7 - count : 6); // 최고 순위와 최저 순위 계산 const maxRank = getRank(matchCount + zeroCount); const minRank = getRank(matchCount); ret.. 2024. 12. 12.
[프로그래머스 Lv.1] 실패율 javascript function solution(N, stages) { var answer = []; let totalPlayers = stages.length; // 전체 사용자 수 let failureRates = []; // 실패율을 저장할 배열 // 각 스테이지별 실패율 계산 for (let i = 1; i stage === i).length; // i번 스테이지에 멈춰 있는 사람 수 let failureRate = notCleared / totalPlayers; // 실패율 계산 failureRates.push({ stage: i, rate: failureRate }); // 실패율과 스테이지 저장 totalPlayers -= notCleared.. 2024. 12. 10.
[프로그래머스 Lv.1] 옹알이(2) javascript function solution(babbling) { var answer = 0; const words = ["aya", "ye", "woo", "ma"]; // 조카가 발음할 수 있는 단어 목록 // 각 단어에 대해 처리 babbling.forEach(babble => { let isValid = true; // 유효한 발음인지 체크 let prevWord = ""; // 이전에 발음한 단어를 저장 while (babble.length > 0 && isValid) { let found = false; for (let word of words) { if (babble.. 2024. 12. 6.
[프로그래머스 Lv.1] 덧칠하기 javascript 너무 어렵게 생각해서 잘 안 풀렸는데 다른 분 코드를 보니 이제 보인다 ....ㅎㅎ다른 사람 풀이function solution(n, m, sections) { var answer = 0; var painted = 0; for(var section of sections) { if(painted 2024. 12. 6.
[프로그래머스 Lv.1] 소수 만들기 function solution(nums) { let answer = 0; // 소수 판별 함수 const isPrime = (num) => { if (num 2024. 12. 5.
[프로그래머스 Lv.1] 소수 찾기 javascript function solution(n) { var answer = 0; // 1에서 n까지의 숫자를 담은 배열 생성 const numbers = Array.from({ length: n }, (_, i) => i + 1); // 각 숫자의 약수 개수를 구함 numbers.forEach(num => { let divisorCount = 0; // 1부터 num까지 나누어떨어지는지 확인 for (let i = 1; i  처음 풀이었는데 테스트 후반 부에 시간 초과로 실패가 떴다.아래는 에라토스테네스의 체를 사용하는 것이라고 한다.function solution(n) { var answer = 0; // 1부터 n까지 true로 초기화된.. 2024. 12. 3.