연습장
[프로그래머스 Level 1] 완주하지 못한 선수 - JavaScript
문제 링크 https://programmers.co.kr/learn/courses/30/lessons/42576 코딩테스트 연습 - 완주하지 못한 선수 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수 programmers.co.kr 풀이 function solution(participant, completion) { const map = new Map(); participant.forEach(name => map.set(name, (map.get(name) || 0) + 1)); completion.forEach(name => map.set(name, (map..
[백준 4948 - Node.js] 베르트랑 공준
문제 링크 https://www.acmicpc.net/problem/4948 4948번: 베르트랑 공준 베르트랑 공준은 임의의 자연수 n에 대하여, n보다 크고, 2n보다 작거나 같은 소수는 적어도 하나 존재한다는 내용을 담고 있다. 이 명제는 조제프 베르트랑이 1845년에 추측했고, 파프누티 체비쇼 www.acmicpc.net 풀이 const input = require('fs') .readFileSync('/dev/stdin') .toString() .trim() .split('\n') .slice(0, -1) .map(v => +v); const prime = Array(123456 * 2 + 1).fill(true); for (let i = 2; i
[백준 17219 - Node.js] 비밀번호 찾기
문제 링크 https://www.acmicpc.net/problem/17219 17219번: 비밀번호 찾기 첫째 줄에 저장된 사이트 주소의 수 N(1 ≤ N ≤ 100,000)과 비밀번호를 찾으려는 사이트 주소의 수 M(1 ≤ M ≤ 100,000)이 주어진다. 두번째 줄부터 N개의 줄에 걸쳐 각 줄에 사이트 주소와 비밀번 www.acmicpc.net 풀이 const [NM, ...input] = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n'); const [N, M] = NM.split(' ').map(v => +v); const memos = input.slice(0, N); const targets = input.slic..
[백준 17218 - Node.js] 비밀번호 만들기
문제 링크 https://www.acmicpc.net/problem/17218 17218번: 비밀번호 만들기 첫째 줄과 둘째 줄에 수형이가 눈을 감고 만든 두 문자열이 주어진다. 문자열은 알파벳 대문자로만 이루어져 있으며, 길이는 최대 40자이다. 빈 문자열은 주어지지 않는다. 가장 긴 부분 문자열 www.acmicpc.net 풀이 const [ first, second ] = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n'); const dp = [...Array(first.length + 1)].map(() => Array(second.length + 1).fill(0)); for (let i = 1; i
[백준 10994 - Node.js] 별 찍기 - 19
문제 링크 https://www.acmicpc.net/problem/10994 10994번: 별 찍기 - 19 예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요. www.acmicpc.net 풀이 const N = +require('fs').readFileSync('/dev/stdin').toString().trim(); const getStar = (N) => { if (N === 1) { return ['*']; } const prev = getStar(N - 1); const len = prev[0].length; return [ '*'.repeat(len + 4), `*${' '.repeat(len + 2)}*`, ...prev.map(line => `* ${line} *`), `*${' '.re..
[백준 2748 - Node.js] 피보나치 수 2
문제 링크 https://www.acmicpc.net/problem/2748 2748번: 피보나치 수 2 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 www.acmicpc.net 풀이 const n = +require('fs').readFileSync('/dev/stdin').toString().trim(); const dp = Array(n + 1).fill(BigInt(0)); dp[1] = BigInt(1); for (let i = 2; i
[백준 3036 - Node.js] 링
문제 링크 https://www.acmicpc.net/problem/3036 3036번: 링 출력은 총 N-1줄을 해야 한다. 첫 번째 링을 제외한 각각의 링에 대해서, 첫 번째 링을 한 바퀴 돌리면 그 링은 몇 바퀴 도는지 기약 분수 형태 A/B로 출력한다. www.acmicpc.net 풀이 const [_, ...radius] = require('fs').readFileSync('/dev/stdin').toString().trim().split(/\s/); const getGCD = (a, b) => { let big = Math.max(a, b); let small = Math.min(a, b); let remainder = big % small; while (remainder) { big = sm..
[백준 1744 - Node.js] 수 묶기
문제 링크 https://www.acmicpc.net/problem/1744 1744번: 수 묶기 길이가 N인 수열이 주어졌을 때, 그 수열의 합을 구하려고 한다. 하지만, 그냥 그 수열의 합을 모두 더해서 구하는 것이 아니라, 수열의 두 수를 묶으려고 한다. 어떤 수를 묶으려고 할 때, 위치에 www.acmicpc.net 풀이 const [ _, ...arr ] = require('fs').readFileSync('/dev/stdin').toString().trim().split(/\s+/).map(v => +v); const solve = (arr) => { let answer = 0; const pos = arr.filter(v => v > 0).sort((a, b) => b - a); const ..
[백준 1339 - Node.js] 단어 수학
문제 링크 https://www.acmicpc.net/problem/1339 1339번: 단어 수학 첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대 www.acmicpc.net 풀이 const [ _, ...words ] = require('fs').readFileSync('/dev/stdin').toString().trim().split(/\s+/); const solve = words => { const count = {}; words.forEach(word => { [...word].forEach((alphabet, i) => { if (!count..
[백준 1182 - Node.js] 부분수열의 합
문제 링크 https://www.acmicpc.net/problem/1182 1182번: 부분수열의 합 첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다. www.acmicpc.net 풀이 const [ N, S, ...arr ] = require('fs').readFileSync('/dev/stdin').toString().trim().split(/\s+/).map(v => +v); const solve = (N, S, arr) => { let output = 0; const recursion = (i, sum) => { if (..