- 발행일
[99클럽] 99클럽 코테 스터디 13일차 + 해시
[비기너] 단어 정렬 https://www.acmicpc.net/problem/1181
[비기너] 단어 정렬 https://www.acmicpc.net/problem/1181
저는 기존에 프로그래머스 문제를 정답률 순서대로 풀이하는 방식으로 코딩 테스트를 공부했습니다. 하지만 점점 난이도가 높아지면서 문제를 풀 때 체계적인 접근법이 부족하다는 것을 느꼈습니다. 특히,
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
for (let i = 0; i <= s.length - 10; i++) { const sequence = s.substring(i, i + 10); if (seen.has(sequence)) { repeated.add(sequence); } else …
const rl = readline.createInterface({ input: process.stdin, output: process.stdout, });
const N = Number(input[0]); let count = 0;
for (let i = 0; i < num.length; i++) { if (Number(num[i]) !== count[i]) { return false; } }
let a = 1; let b = 2;
push(x) { this.q2.push(x); while (this.q1.length) { this.q2.push(this.q1.shift()); } [this.q1, this.q2] = [this.q2, this.q1]; }
push(x) { this.stackIn.push(x); }
const readline = require('readline');
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
// 단방향 그래프 만들기 arr.map(([from, to]) => graph[from].push(to));
const [N, M] = input[0].split(' ').map(Number);
// 3차원 배열에 입력값 삽입 for (let i = 0; i < H; i++) { for (let j = 0; j < N; j++) { boxes[i][j] = input.shift().split(' ').map(Number); } }
필수 해시태그: #99클럽 #코딩테스트준비 #개발자취업 #항해99 #TIL
for(i of list){ if(money === 0){ break; } //몫을 count하면서 잔돈 개수 카운트 count += parseInt(money / i); money %= i;…
const readline = require("readline").createInterface({ input: process.stdin, output: process.stdout, });
• 비기너: https://www.acmicpc.net/problem/2161 (30분)
function minimumTime(N) { let time = 0; // 총 소요 시간 let currentString = ""; // 현재 입력된 문자열 // 첫 번째 'daldidalgo' 입력 currentString += replayKe…
let N, K; let input = [];
input.forEach((v) => { v = v.split(" "); v = v.map((v) => parseInt(v)); times.push([v[0], 1]); times.push([v[1], -1]); });
if(X==Y){ console.log(-1) }else{ const C = Math.floor(Y100/X)+1 if(C==100){ console.log(-1) }else{ const Z = Math.ceil((CX-100Y)/(100-C)) c…
• 비기너: https://www.acmicpc.net/problem/2075 (30분)
• 비기너: https://www.acmicpc.net/problem/19638 (30분)
• 비기너: https://leetcode.com/problems/take-gifts-from-the-richest-pile/description/ (30분)
필수 해시태그: #99클럽 #코딩테스트준비 #개발자취업 #항해99 #TIL
• 비기너: https://www.acmicpc.net/problem/1417 (30분)
let pair = new Array(7); pair[1] = 6; pair[2] = 4; pair[3] = 5; pair[4] = 2; pair[5] = 3; pair[6] = 1;
• 비기너: https://www.acmicpc.net/problem/11004 (30분)
const rl = readline.createInterface({ input: process.stdin, output: process.output, });
const test_num = Number(input.shift()); const test_case = input.shift().split(" ").map(Number);
const MAX = Math.max(...arr);
for(i of list){ if(money === 0){ break; } //몫을 count하면서 잔돈 개수 카운트 count += parseInt(money / i); money %= i;…
// 모든 상자에 대해 반복 for (let i = 1; i < n; i++) { for (let j = 0; j < i; j++) { // 앞의 상자 크기가 현재 상자 크기보다 작으면 dp 갱신 if (sizes[j] …
function solution(data) { const [[N, _], ...arr] = data.map((el) => el.split(" ").map(Number)); // 그래프 배열 const graph = Array.from({ length: N + 1 }, …
필수 해시태그: #99클럽 #코딩테스트준비 #개발자취업 #항해99 #TIL
// 정점의 수 N (5 ≤ N ≤ 100,000), 간선의 수 M (1 ≤ M ≤ 200,000), 시작 정점 R (1 ≤ R ≤ N) let N = Number(input[0].split(' ')[0]) let M = Number(input[0].split(' ')[1]) let …
const [N, M, R] = input[0].split(" ").map(Number); const arr = input.slice(1); const graph = Array.from({ length: N + 1 }, () => []); const visitedOrder = Arra…
const [N, M] = input.shift().split(" ").map(Number);
필수 해시태그: #99클럽 #코딩테스트준비 #개발자취업 #항해99 #TIL
let answer, degree = 0; let visited = Array(n + 1).fill(false); let graph = [...Array(n + 1)].map(() => []);
const bfs = (start, [ex, ey], l, visited) => { const queue = [start]; while (queue.length) { const [x, y, depth] = queue.shift(); if (x === ex && y…
const rl = readline.createInterface({ input: process.stdin, output: process.stdout, });
비기너 개미 https://www.acmicpc.net/problem/3048
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
비기너 좌표 압축 https://www.acmicpc.net/problem/18870
비기너 파일정리 https://www.acmicpc.net/problem/20291
비기너 회전초밥 https://www.acmicpc.net/problem/28107
비기너 절댓값 힙 https://www.acmicpc.net/problem/11286
비기너 크리스마스 선물 https://www.acmicpc.net/problem/14235
비기너 Relative Ranks https://leetcode.com/problems/relative-ranks/description/
비기너 더 맵게 https://school.programmers.co.kr/learn/courses/30/lessons/42626
const solution = (s) => { const arr = ['()', '[]']; return s.map(el => { let i=0; while(i<arr.length){ if(el.indexOf(arr[i]) !== -1){ …
비기너 식당 메뉴 https://www.acmicpc.net/problem/26043
비기너 큐 https://www.acmicpc.net/problem/10845
비기너 막대기 https://www.acmicpc.net/problem/17608
for(let i = 1; i <= testNum; i++) { const [cmd, num] = input[i].trim().split(/s/g); if (cmd === 'push') cmdObj.push(parseInt(num)); else answer.pus…
비기너 회상 https://www.acmicpc.net/problem/32953
비기너 https://www.acmicpc.net/problem/2490
비기너 전주 듣고 노래 맞히기 https://www.acmicpc.net/problem/31562
// readline 모듈을 사용하여 입력 처리 const readline = require("readline");
const alphabet = { a: 1n, b: 2n, c: 3n, d: 4n, e: 5n, f: 6n, g: 7n, h: 8n, i: 9n, j: 10n, k: 11n, l: 12n, m: 13n, n: 14n, o: 15n,…
코딩 테스트에서 '해시(Hash)'는 매우 중요한 개념 중 하나입니다. 해시를 잘 이해하고 활용하면 복잡한 문제도 효율적으로 해결할 수 있습니다. 이번 글에서는 해시의 기본 개념부터 코딩 테스트에서 자주 등장하는 문제 유형과 그 해결 방법까지 살펴보겠습니다.
필수 해시태그: #99클럽 #코딩테스트준비 #개발자취업 #항해99 #TIL
console.log(result.join('n'))
let caseCount = Number(input[0]); let result = '';
코딩 테스트는 개발자의 기술력을 평가하기 위해 사용되며, 기술 스택과 사용 환경에 따라 요구되는 역량과 문제 풀이 방식이 달라질 수 있습니다. 특히 Node.js와 JavaScript는 같은 언어 기반이지만, 사용 목적과 환경에서 차이가 있기 때문에 코딩 테스트에서도 접근 방식이 다릅…
자바스크립트에서 문자열(String)은 프로그래밍에서 가장 기본적이고 중요한 데이터 타입 중 하나입니다. 이번 글에서는 문자열이 무엇인지, 어떻게 사용하는지, 그리고 자바스크립트에서 문자열을 다루는 다양한 방법에 대해 알아보겠습니다.
프로그래머스 괄호 문제 정리
코딩테스트 그래프
코딩테스트 트리
코딩 테스트 탐색 이진탐색 완전탐색
코딩테스트 그리디
프로그래머스 코딩테스트 배열
코딩테스트 스택과 큐 프로그래머스
해시 프로그래머스 모음
제로베이스 코딩테스트 1주차 ~ 8주차 과정 정리
코딩테스트 연결 리스트
코딩테스트 수학함수
코딩테스트 덱
코딩테스트 행렬
코딩테스트 재귀함수
코딩테스트 힙
코딩테스트 동적계획법
코딩테스트 백트레킹
코딩테스트 정렬
배열은 데이터 구조에서 매우 중요한 역할을 하며, 내장함수는 이를 더욱 효과적으로 다루는 데 큰 도움을 줍니다. 이 포스트에서는 배열의 기본 개념과 자바스크립트 내장함수들을 설명하겠습니다.
리스트는 데이터의 순차적인 컬렉션입니다. 배열이라고도 하며, 일반적으로 고정된 크기를 가지지 않고 동적으로 크기를 조절할 수 있습니다. 리스트의 요소는 인덱스로 접근할 수 있으며, 다양한 프로그래밍 언어에서 지원됩니다.
이분탐색은 코딩 테스트에서 자주 등장하는 알고리즘 중 하나로, 정렬된 배열에서 특정 값을 효율적으로 찾기 위해 사용됩니다. 이분탐색을 잘 풀기 위해 알아야 할 개념과 방법을 단계별로 설명하겠습니다.
그래프 문제는 알고리즘 코딩 테스트에서 자주 등장하는 주제 중 하나입니다. 그래프 문제를 잘 풀기 위해서는 몇 가지 중요한 개념과 알고리즘을 이해하고 있어야 합니다. 여기서는 그래프 문제를 잘 풀 수 있는 방법을 단계별로 설명하겠습니다.
깊이 / 너비 우선 탐색 ( DFS / BFS )
동적 계획법(Dynamic Programming, DP)은 복잡한 문제를 단순한 하위 문제로 나누어 해결하는 알고리즘 기법입니다. 이 방법은 각 하위 문제를 한 번만 해결하고 그 결과를 재사용함으로써 시간 복잡도를 줄이는 데 효과적입니다.
1. 주어진 패턴 p와 문자열 s가 있습니다. 2. 패턴 p의 각 문자는 문자열 s의 단어들에 일대일 대응해야 합니다. 3. 패턴 p와 문자열 s의 길이가 일치하지 않으면 조건을 만족하지 않습니다. 4. 패턴 p의 동일한 문자는 문자열 s의 동일한 단어에 매핑되어야 합니다. 5. 패턴…
버블 정렬은 인접한 두 원소를 비교하여 순서가 잘못된 경우 서로 교환하는 방식입니다. 가장 큰 원소가 맨 끝으로 "버블"처럼 올라가는 모습을 띱니다.
완전 탐색(Brute Force Search)은 가능한 모든 경우의 수를 탐색하여 해답을 찾는 방법입니다. 단순하지만 확실한 해결책을 제공하는 알고리즘으로, 문제의 크기가 작을 때 유용합니다.
탐욕법(Greedy Algorithm)은 매 순간 가장 최적이라고 생각되는 선택을 하는 알고리즘입니다. 최적해를 보장하지는 않지만, 많은 경우 근사해를 빠르게 구할 수 있습니다.
힙(Heap)은 우선순위 큐(Priority Queue)를 구현하는 데 사용되는 완전 이진 트리 자료 구조입니다. 힙은 최대 힙(Max Heap)과 최소 힙(Min Heap)으로 나눌 수 있으며, 각 노드의 부모 노드와 자식 노드 간의 우선순위 관계를 유지합니다.
스택은 LIFO(Last In, First Out) 구조로, 마지막에 삽입된 요소가 가장 먼저 제거됩니다. 스택의 주요 연산은 push(삽입), pop(제거), peek(가장 위의 요소 확인)입니다.
해시 알고리즘은 데이터를 고정된 크기의 해시 값으로 변환하는 함수입니다. 해시 값은 일반적으로 짧고 고정된 길이의 문자열이나 숫자로 표현되며, 데이터의 고유한 식별자로 사용됩니다. 해시 알고리즘은 다양한 용도로 사용되며, 가장 일반적인 사용 사례는 데이터 검색, 데이터 무결성 검증, …
진법은 숫자를 표현하는 방식으로, 기본적으로 사용하는 10진법 외에도 2진법, 8진법, 16진법 등이 있습니다. 각 진법은 특정한 숫자 집합과 자리값을 사용하여 수를 표현합니다.
두 행렬의 덧셈은 같은 위치에 있는 원소끼리 더하는 것입니다. 두 행렬의 크기가 같아야 덧셈이 가능합니다.
동적 계획법 (Dynamic Programming)
슬라이딩 윈도우(Sliding Window) 기법은 배열이나 리스트와 같은 연속된 데이터 구조를 효율적으로 처리하기 위해 사용되는 알고리즘 기법입니다. 이 기법은 고정된 크기의 윈도우를 배열의 시작부터 끝까지 이동시키면서 필요한 계산을 수행합니다. 슬라이딩 윈도우는 다양한 문제에서 유…
1. 접두사 배열(Prefix Array) 생성
// 양 끝에서 중앙으로 이동하며 문자를 비교 while (left < right) { if (str[left] !== str[right]) { return false; // 문자가 다르면 팰린드롬이 아님 } left++; right--; }
240430 알고리즘
1. 스택과 큐의 차이점은 무엇인가요? 2. 동적 프로그래밍과 분할 정복 기법의 차이점은 무엇인가요? 3. 그래프와 트리의 차이점은 무엇인가요? 4. 피보나치 수열을 계산하는 다양한 방법에 대해 설명해주세요. 5. 배열과 링크드 리스트의 탐색 성능을 비교해주세요. 6. 빅 오 표기법에…
JavaScript의 reduce 메서드는 배열의 각 요소에 대해 주어진 리듀서(reducer) 함수를 실행하여, 단일 결과값을 생성합니다. 이 메서드는 배열을 순회하면서 각 요소에 대한 연산을 누적적으로 수행합니다. reduce 메서드는 주로 배열 내의 모든 값의 합, 평균, 최대값…
const array = [1, 2, 3, 4]; const squaredArray = array.map(element => element element); console.log(squaredArray); // 출력: [1, 4, 9, 16]
자료구조는 다수의 자료를 담기 위한 구조이다.
선택 정렬은 매 단계에서 가장 작은 원소를 선택해서 앞으로 보내는 정렬 방법
현재 상황에서 당장 가장 좋아보이는 상황만 선택하는 알고리즘
투포인터 알고리즘은 주로 배열이나 리스트에서 두 개의 포인터를 이용하여 문제를 해결하는 방법입니다. 이 알고리즘은 주로 정렬된 배열에서 두 수의 합, 최대 부분합, 연속된 데이터의 특징을 찾을 때 유용합니다.
1. 출발 노드를 설정하고, 출발 노드로부터 각 노드까지의 거리를 저장하는 배열을 무한대로 초기화합니다. 출발 노드의 거리는 0으로 설정합니다. 2. 아직 방문하지 않은 노드 중에서 가장 가까운 노드를 선택합니다. 3. 선택한 노드를 통해 다른 노드로 가는 거리를 계산하고, 기존에 저…
function dfs(queens, row, n, results) { if (row === n) { results.push(queens.map(q => ".".repeat(q) + "Q" + ".".repeat(n - q - 1))); return; …
시간 복잡도는 알고리즘의 성능을 나타내는 척도이다.
[알고리즘] 이번주 내내 공부 내용 링크 정리 - 전체
자료구조
코드 공부하기 - 웹만 있으면 사용할 수 있는 것들!
백준: https://www.acmicpc.net/