연습장

    [백준 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

    [백준 9613] GCD 합 with Node.js

    문제 링크 https://www.acmicpc.net/problem/9613 9613번: GCD 합 첫째 줄에 테스트 케이스의 개수 t (1 ≤ t ≤ 100)이 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있다. 각 테스트 케이스는 수의 개수 n (1 { if (a % b === 0) return b; return getGCD(b, a % b); }; const getSum = (n, ...arr) => { let sum = 0; arr.sort((a, b) => b - a); arr.forEach((v, i) => { while (i < n-1) { sum +..

    [백준 15654] N과 M (5) with Node.js

    문제 링크 https://www.acmicpc.net/problem/15654 15654번: N과 M (5) 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 = () => { if (permutation.length === M) { output.push(permutation.join(' ')); } ..

    [백준 2667] 단지번호붙이기 with Node.js

    문제 링크 https://www.acmicpc.net/problem/2667 2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여 www.acmicpc.net 풀이 const getCount = (start, visited, house) => { const offsetX = [-1, 0, 0, 1]; const offsetY = [0, -1, 1, 0]; const getXY = (idx) => [idx%N, Math.floor(idx/N)]; const getIdx = (x, y) => x + y*N; const isValid = (x, y)..

    [백준 11659] 구간 합 구하기 4 with Node.js

    문제 링크 https://www.acmicpc.net/problem/11659 11659번: 구간 합 구하기 4 첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j www.acmicpc.net 풀이 const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n'); const arr = input[1].split(' ').map(v => +v); const cumsum = new Array(arr.length+1).fill(0); const output = []; ar..

    [백준 5052] 전화번호 목록 with Python

    문제 링크 https://www.acmicpc.net/problem/5052 5052번: 전화번호 목록 첫째 줄에 테스트 케이스의 개수 t가 주어진다. (1 ≤ t ≤ 50) 각 테스트 케이스의 첫째 줄에는 전화번호의 수 n이 주어진다. (1 ≤ n ≤ 10000) 다음 n개의 줄에는 목록에 포함되어 있는 전화번호가 www.acmicpc.net 풀이 import sys t = int(sys.stdin.readline()) for _ in range(t): n = int(sys.stdin.readline()) number = [sys.stdin.readline().strip() for _ in range(n)] number.sort() is_yes = True for i in range(1, n): if ..

    [백준 1927] 최소 힙 with Python

    문제 링크 https://www.acmicpc.net/problem/1927 1927번: 최소 힙 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net 풀이 import sys class Heap: def __init__(self): self.arr = [] def heapify_down(self, k, n): while 2*k+1 < n: L, R = 2*k+1, 2*k+2 if L < n and self.arr[L] < self.arr[k]: m = L else: m = k if R < n and self.arr..