연습장/백준(BOJ) 문제풀이

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

    [백준 11279] 최대 힙 with Python

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

    [백준 11724] 연결 요소의 개수 with Node.js

    문제 링크 https://www.acmicpc.net/problem/11724 11724번: 연결 요소의 개수 첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주 www.acmicpc.net 풀이 const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n'); class Node { constructor(value) { this.value = value; this.prev = null; } } class Stack { con..

    [백준 5904] Moo 게임 with Python

    문제 링크 https://www.acmicpc.net/problem/5904 5904번: Moo 게임 Moo는 술자리에서 즐겁게 할 수 있는 게임이다. 이 게임은 Moo수열을 각 사람이 하나씩 순서대로 외치면 되는 게임이다. Moo 수열은 길이가 무한대이며, 다음과 같이 생겼다. m o o m o o o m o o m o o o www.acmicpc.net 풀이 N = int(input()) def moo(acc, cur, N): prev = (acc-cur)//2 if N prev+cur: return moo(prev, cur-1, N-prev-cur) else: return "o" if N-prev-1 else "m" acc, n = 3, 0 while N > acc: n += 1 acc = acc*..

    [백준 18111] 마인크래프트 with Node.js

    문제 링크 https://www.acmicpc.net/problem/18111 18111번: 마인크래프트 팀 레드시프트는 대회 준비를 하다가 지루해져서 샌드박스 게임인 ‘마인크래프트’를 켰다. 마인크래프트는 1 × 1 × 1(세로, 가로, 높이) 크기의 블록들로 이루어진 3차원 세계에서 자유롭게 www.acmicpc.net 풀이 const input = require("fs").readFileSync("/dev/stdin").toString().trim().split("\n"); const [N, M, B] = input[0].split(" ").map(v => +v); input.shift(); const land = input.join(" ").split(" "); const heightArr = n..