프로그래밍(Basic)

    [바미] 슬라이딩 윈도우 기법

    시작 안녕하세요. 지난번에 체스판 다시 칠하기문제를 풀면서 사용한 윈도우 슬라이딩 기법에 대해 자세히 알아보기 위해 포스팅을 해보려 합니다. 슬라이딩 윈도우 기법? 체스판 다시 칠하기 문제에서 설명했듯이 슬라이딩 윈도우 기법은 배열이나 리스트의 항목을 순차적으로 탐색할 때 사용하는 알고리즘 기법 중 하나입니다. 이 기법은 "창" 또는 "윈도우"라고 할 수 있는 고정된 크기의 부분 배열이나 서브 리스트를 이동시키면서 문제를 해결합니다. 이 윈도우는 데이터 구조를 통해 한 번에 한 항목씩 앞으로 이동하면서 연속적인 데이터의 범위를 처리합니다. 보통 슬라이딩 윈도우 기법은 아래와 같은 상황에서 사용하면 굉장히 유용합니다. 배열이나 리스트에서 고정된 크기의 윈도우를 슬라이드하면서, 각 윈도우에 대한 최대값 또는..

    [바미] 체스판 다시 칠하기

    문제 https://www.acmicpc.net/problem/1018 1018번: 체스판 다시 칠하기 첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다. www.acmicpc.net 코드 및 코드 설명 const input = require('fs').readFileSync('/dev/stdin').toString().split('\n'); const [N, M] = input[0].split(" ").map(Number); // 보드 상태를 2D 배열로 저장 const board = input.slice(1, N + 1); function countRepaint..

    [바미] 수학은 비대면강의입니다

    문제 https://www.acmicpc.net/problem/19532 19532번: 수학은 비대면강의입니다 정수 $a$, $b$, $c$, $d$, $e$, $f$가 공백으로 구분되어 차례대로 주어진다. ($-999 \leq a,b,c,d,e,f \leq 999$) 문제에서 언급한 방정식을 만족하는 $\left(x,y\right)$가 유일하게 존재하고, 이 때 $x$와 $y$가 각각 $- www.acmicpc.net 코드 const input = require('fs').readFileSync('/dev/stdin').toString().split(' '); const [a, b, c, d, e, f] = input.map(Number); // 계수 행렬의 결정자 const delta = a * e ..

    [바미] 분해합

    https://www.acmicpc.net/problem/2231 2231번: 분해합 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 www.acmicpc.net 코드 및 코드 설명 const input = require('fs').readFileSync('/dev/stdin').toString().trim(); const N = Number(input); function findSmallestConstructor(N) { // N을 만들 수 있는 최소의 M을 찾기 위해, 1부터 N까지 모든 수에 대해 검사 for (let M ..

    [바미] Node - GC

    GC? 가비지 컬렉션은 프로그램이 동적으로 할당한 메모리 중에서 더 이상 사용되지 않는 부분을 자동으로 찾아서 해제하는 프로세스입니다. 이는 메모리 누수를 방지하고, 사용 가능한 메모리 공간을 최대화하여 프로그램의 안정성과 성능을 향상시키는 데 필요합니다. Node.js에서는 프로세스 메모리 관리를 개발자가 직접하지 않고 자동으로 수행합니다. 그렇기 때문에 가비지 컬렉션(GC)은 Node.js의 메모리 관리의 핵심이며 성능에 많은 영향을 끼치죠 오늘은 Node.js의 V8 engine이 어떻게 가비지 컬렉션을 수행하는지 알아보겠습니다. 프로세스 메모리 관리 - C와 Node.js 비교 메모리 관리란? 프로그래머가 요청할 때 동적으로 Heap 영역에 메모리 청크를 할당해주고, 더 이상 필요하지 않을 때 메..

    [바미] 블랙잭

    문제 https://www.acmicpc.net/problem/2798 2798번: 블랙잭 첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장 www.acmicpc.net 코드 const input = require('fs').readFileSync('/dev/stdin').toString().split('\n'); const [N, M] = input[0].split(" ").map((a) => Number(a)); // 첫 번째 줄에서 N과 M을 읽어옴. const cards = input[1].split(" ").map((..

    [바미] 알고리즘 수업 - 점근적 표기 1

    https://www.acmicpc.net/problem/24313 24313번: 알고리즘 수업 - 점근적 표기 1 f(n) = 7n + 7, g(n) = n, c = 8, n0 = 1이다. f(1) = 14, c × g(1) = 8이므로 O(n) 정의를 만족하지 못한다. www.acmicpc.net 코드 const input = require('fs').readFileSync('/dev/stdin').toString().split('\n'); const n = Number(input[2]) const [a1, a0] = input[0].split(" ").map((a) => Number(a)) const fnSum = a1 * n + a0 const g = Number(input[1]) const gn..

    [바미] 알고리즘 수업 - 알고리즘의 수행 시간 6

    https://www.acmicpc.net/problem/24267 코드 const input = require('fs').readFileSync(process.platform === "linux" ? "/dev/stdin" : "./input.txt").toString().trim(); const result = ( BigInt(input) * BigInt(input - 1) * BigInt(input - 2) ) / BigInt(6); console.log(`${result}\n${3}`); 문제 설명 문제는 주어진 MenOfPassion 알고리즘에 대한 수행 시간을 분석하고, 그 결과를 특정 형식으로 출력하는 문제인데요. MenOfPassion 알고리즘은 세 개의 중첩된 for 반복문을 사용하여 특..

    [바미]알고리즘 수업 - 알고리즘의 수행 시간 5

    https://www.acmicpc.net/problem/24266 24266번: 알고리즘 수업 - 알고리즘의 수행 시간 5 오늘도 서준이는 알고리즘의 수행시간 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자. 입력의 크기 n이 주어지면 MenOfPassion 알고리즘 수행 시 www.acmicpc.net 코드 function menOfPassionAlgorithmPerformance(n) { // n을 BigInt로 변환 const bigN = BigInt(n); // BigInt를 사용하여 n^3 계산 const result = bigN ** BigInt(3); console.log(result.toString()); // 코드1의 수행 횟수를 문자열로 ..