연습장
[백준 1389] 케빈 베이컨의 6단계 법칙 with Node.js
문제 링크 https://www.acmicpc.net/problem/1389 1389번: 케빈 베이컨의 6단계 법칙 첫째 줄에 유저의 수 N (2 ≤ N ≤ 100)과 친구 관계의 수 M (1 ≤ M ≤ 5,000)이 주어진다. 둘째 줄부터 M개의 줄에는 친구 관계가 주어진다. 친구 관계는 A와 B로 이루어져 있으며, A와 B가 친구라는 뜻 www.acmicpc.net 풀이 const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n'); const [ N, M ] = input.shift().split(' ').map(v => +v); const bacon = new Array(N+1).fill(0); const g..
[백준 9375] 패션왕 신해빈 with Node.js
문제 링크 https://www.acmicpc.net/problem/9375 9375번: 패션왕 신해빈 첫 번째 테스트 케이스는 headgear에 해당하는 의상이 hat, turban이며 eyewear에 해당하는 의상이 sunglasses이므로 (hat), (turban), (sunglasses), (hat,sunglasses), (turban,sunglasses)로 총 5가지 이다. www.acmicpc.net 풀이 const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n'); const iterator = input[Symbol.iterator](); let T = +iterator.next().value; w..
[백준 5525] IOIOI with Python
문제 링크 https://www.acmicpc.net/problem/5525 5525번: IOIOI N+1개의 I와 N개의 O로 이루어져 있으면, I와 O이 교대로 나오는 문자열을 PN이라고 한다. P1 IOI P2 IOIOI P3 IOIOIOI PN IOIOI...OI (O가 N개) I와 O로만 이루어진 문자열 S와 정수 N이 주어졌을 때, S안에 PN이 몇 www.acmicpc.net 풀이 N = int(input()) M = int(input()) S = input() P = 'IO' * N + 'I' switch = False count = 1 output = 0 for i in range(M): if not switch and S[i] == 'I': switch = True elif switch..
[백준 17626] Four Squares with Node.js
문제 링크 https://www.acmicpc.net/problem/17626 17626번: Four Squares 라그랑주는 1770년에 모든 자연수는 넷 혹은 그 이하의 제곱수의 합으로 표현할 수 있다고 증명하였다. 어떤 자연수는 복수의 방법으로 표현된다. 예를 들면, 26은 52과 12의 합이다; 또한 42 + 32 + 1 www.acmicpc.net 풀이 const solve = n => { const dp = new Array(n+1).fill(0); dp[1] = 1; for (let i=2; i
[백준 11052] 카드 구매하기 with Python
문제 링크 https://www.acmicpc.net/problem/11052 11052번: 카드 구매하기 첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000) 둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000) www.acmicpc.net 풀이 import sys N = int(sys.stdin.readline()) card = [0] + list(map(int, sys.stdin.readline().split())) dp = [0]*(N+1) dp[1] = card[1] for i in range(2, N+1): highest = 0 for j in range(1, i//2 + 1): if dp[j] + dp[i-j] > hi..
[백준 1541] 잃어버린 괄호 with Node.js
문제 링크 https://www.acmicpc.net/problem/1541 1541번: 잃어버린 괄호 첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 www.acmicpc.net 풀이 const solve = expression => { const getSum = arr => { return arr.split(/[\+-]/).map(v => +v).reduce((acc, n) => acc + n, 0); } const firstMinus = expression.indexOf('-'); if (firstMinus === -1) { console.log(get..
[백준 1931] 회의실 배정 with Node.js
문제 링크 https://www.acmicpc.net/problem/1931 1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net 풀이 const solve = (N, input) => { const schedule = input.map(time => time.split(' ').map(v => +v)).sort((a, b) => { if (a[1] === b[1]) { return a[0] - b[0]; } else return a[1] - b[1]; }); let i = 0; let count = 0; let curEnd = 0; while (i < N) { const [ start, end ] = schedule[i++]; ..
[백준 1149] RGB거리 with Node.js
문제 링크 https://www.acmicpc.net/problem/1149 1149번: RGB거리 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 www.acmicpc.net 풀이 const solve = (n, rgb) => { dp = [...new Array(n+1)].map(v => new Array(3).fill(0)); dp[1] = rgb[0]; for (let i=2; i cost.split(' ').map(v => +v))); dp[n][0]을 n번째 집을 빨간색으로 칠했을 때 전체 비용의 최솟값, dp[n][1]을 n번..
[백준 2156] 포도주 시식 with Node.js
문제 링크 https://www.acmicpc.net/problem/2156 2156번: 포도주 시식 효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규 www.acmicpc.net 풀이 const solve = (n, wine) => { if (n === 1) return wine[0]; else if (n === 2) return wine[0] + wine[1]; const dp = new Array(n).fill(0); dp[1] = wine[0]; dp[2] = wine[0] + wine[1]; for (let i=3; i +v); console.log(sol..
[백준 15656] N과 M (7) with Node.js
문제 링크 https://www.acmicpc.net/problem/15656 15656번: N과 M (7) N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열 www.acmicpc.net 풀이 const solve = (N, M, arr) => { const permutation = []; const output = []; const recursion = () => { if (permutation.length === M) { output.push(permutation.join(' ')); } else { for (const i of arr) { permutati..