[바미] 수 정렬하기
·
하루 알고리즘(JS)
문제 https://www.acmicpc.net/problem/2750 2750번: 수 정렬하기 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net 코드 const fs = require('fs'); const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n'); const n = parseInt(input[0], 10); const numbers = input.slice(1).map(Number); // 첫 번째 줄을 제외하고 숫자로 변환 numbers.sort((a, b)..
[바미] 설탕 배달 다국어
·
하루 알고리즘(JS)
문제 https://www.acmicpc.net/problem/2839 2839번: 설탕 배달 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그 www.acmicpc.net 코드 function minBagsOfSugar(N) { let fiveKgBags = Math.floor(N / 5); // 가능한 한 많은 5kg 봉지 수 let remainingWeight = N % 5; // 5kg 봉지 사용 후 남은 무게 while (fiveKgBags >= 0) { if (remainingWeight % 3 === 0) { // 남은 무게가 3kg 봉지로 딱 맞을 경우 re..
[바미] 영화감독 숌
·
하루 알고리즘(JS)
문제 https://www.acmicpc.net/problem/1436 1436번: 영화감독 숌 666은 종말을 나타내는 수라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타워 www.acmicpc.net 코드 및 코드 설명 function findNthTitle(n) { let count = 0; // 666을 포함하는 숫자의 개수를 세기 위한 카운터 let num = 666; // 종말의 수 검색을 시작할 값 while (true) { if (num.toString().includes('666')) { // 숫자를 문자열로 변환하여 '666'이 포함되어 있는지 확인 count++; // ..
[바미] 슬라이딩 윈도우 기법
·
하루 알고리즘(JS)
시작 안녕하세요. 지난번에 체스판 다시 칠하기문제를 풀면서 사용한 윈도우 슬라이딩 기법에 대해 자세히 알아보기 위해 포스팅을 해보려 합니다. 슬라이딩 윈도우 기법? 체스판 다시 칠하기 문제에서 설명했듯이 슬라이딩 윈도우 기법은 배열이나 리스트의 항목을 순차적으로 탐색할 때 사용하는 알고리즘 기법 중 하나입니다. 이 기법은 "창" 또는 "윈도우"라고 할 수 있는 고정된 크기의 부분 배열이나 서브 리스트를 이동시키면서 문제를 해결합니다. 이 윈도우는 데이터 구조를 통해 한 번에 한 항목씩 앞으로 이동하면서 연속적인 데이터의 범위를 처리합니다. 보통 슬라이딩 윈도우 기법은 아래와 같은 상황에서 사용하면 굉장히 유용합니다. 배열이나 리스트에서 고정된 크기의 윈도우를 슬라이드하면서, 각 윈도우에 대한 최대값 또는..
[바미] 체스판 다시 칠하기
·
하루 알고리즘(JS)
문제 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..
[바미] 수학은 비대면강의입니다
·
하루 알고리즘(JS)
문제 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 ..
[바미] 분해합
·
하루 알고리즘(JS)
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 ..
[바미] 블랙잭
·
하루 알고리즘(JS)
문제 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
·
하루 알고리즘(JS)
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..
Bami