연습장/백준(BOJ) 문제풀이
[백준 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..
[백준 1932] 정수 삼각형 with Node.js
문제 링크 https://www.acmicpc.net/problem/1932 1932번: 정수 삼각형 첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다. www.acmicpc.net 풀이 const solve = (n, triangle) => { if (n === 1) return triangle[0][0]; else if (n === 2) return triangle[0][0] + Math.max(...triangle[1]); for (let i=n-2; i>=0; i--) { triangle[i].forEach((v, idx, arr) => { arr[idx] = v + Math.max(triangle[i+1][idx], triang..
[백준 4963] 섬의 개수 with Node.js
문제 링크 https://www.acmicpc.net/problem/4963 4963번: 섬의 개수 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 지도의 너비 w와 높이 h가 주어진다. w와 h는 50보다 작거나 같은 양의 정수이다. 둘째 줄부터 h개 줄에는 지도 www.acmicpc.net 풀이 const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n'); const iterator = input[Symbol.iterator](); const dfs = (w, h, arr, visited, start) => { const offsetX = [-1, 0, 1, -1, 1, -1,..
[백준 15655] N과 M (6) with Node.js
문제 링크 https://www.acmicpc.net/problem/15655 15655번: N과 M (6) N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열 www.acmicpc.net 풀이 const solve = (N, M, arr) => { let permutation = []; const chosen = new Array(N).fill(false); const output = []; const recursion = prev => { if (permutation.length === M) { output.push(permutation.join(' ')); ..
[백준 2512] 예산 with Node.js
문제 링크 https://www.acmicpc.net/problem/2512 2512번: 예산 첫째 줄에는 지방의 수를 의미하는 정수 N이 주어진다. N은 3 이상 10,000 이하이다. 다음 줄에는 각 지방의 예산요청을 표현하는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 값들은 모두 1 이상 www.acmicpc.net 풀이 const solve = (input, N, M) => { input.sort((a, b) => a - b); let high = input[N-1]; let low = 1; while (low acc + (v