연습장
[백준 2606] 바이러스 with Python
문제 링크 www.acmicpc.net/problem/2606 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어 www.acmicpc.net 풀이 import sys class MyGraph(): def __init__(self, n): self.graph = {} for i in range(1, n+1): self.graph[i] = [] def add(self, start, end): self.graph[start].append(end) self.graph[end].append(start) def dfs(self, start): visite..
[백준 2960] 에라토스테네스의 체 with Node.js
문제 링크 www.acmicpc.net/problem/2960 2960번: 에라토스테네스의 체 2, 4, 6, 8, 10, 3, 9, 5, 7 순서대로 지워진다. 7번째 지워진 수는 9이다. www.acmicpc.net 풀이 const [n, k] = require("fs").readFileSync("/dev/stdin").toString().trim().split(" ").map(v => +v); const arr = []; for (let i=2; i { if (v % prime === 0) { arr.splice(arr.indexOf(v), 1); nth = v count++; } if (count === k) return true; }); } console.log(nth); 2부터 n까지 수 중에..
[백준 4949] 균형잡힌 세상 with Node.js
문제 링크 www.acmicpc.net/problem/4949 4949번: 균형잡힌 세상 하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마 www.acmicpc.net 풀이 const arr = require("fs").readFileSync("/dev/stdin").toString().trim().split("\n"); const open = ["(", "["]; const closed = [")", "]"]; let stack; const yesno = []; arr.slice(0, arr.length-1).forEach(v => { let isN..
[백준 1764] 듣보잡 with Node.js
문제 링크 www.acmicpc.net/problem/1764 1764번: 듣보잡 첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. www.acmicpc.net 풀이 const input = require("fs").readFileSync("/dev/stdin").toString().trim().split(/\s/); const n = +input[0]; const m = +input[1]; const n_arr = input.slice(2, n+2); const m_arr = input.slice(n+2); function binary_search(arr..
[백준 11399] ATM with Python
문제 링크 www.acmicpc.net/problem/11399 11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net 풀이 import sys n = int(sys.stdin.readline()) p = list(map(int, sys.stdin.readline().split())) p.sort() acc = 0 for i in range(n): acc += sum(p[:i+1]) print(acc) P1~Pn의 합이 최소가 되려면 P를 오름차순 정렬한 순서대로 돈을 인출하면 된다.
[백준 1003] 피보나치 함수 with Python
문제 링크 www.acmicpc.net/problem/1003 1003번: 피보나치 함수 각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다. www.acmicpc.net 풀이 import sys t = int(sys.stdin.readline()) dp = [(1, 0), (0, 1)] for i in range(t): n = int(sys.stdin.readline()) for i in range(len(dp), n+1): dp.append((dp[i-1][0]+dp[i-2][0], dp[i-1][1]+dp[i-2][1])) print(dp[n][0], dp[n][1]) f(n) = f(n-1) + f(n-2)이므로, f(n)을 수행하는 동안 0과 1을 출력한 ..
[백준 9095] 1, 2, 3 더하기 with Python
문제 링크 www.acmicpc.net/problem/9095 9095번: 1, 2, 3 더하기 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. www.acmicpc.net 풀이 import sys t = int(sys.stdin.readline()) def f(n, case=""): if n == 0: cases.append(case) else: for i in range(1, 3+1): if n >= i: f(n-i, case=case+str(i)) for i in range(t): n = int(sys.stdin.readline()) cases = [] f(n) print(len(set(cases))) 재귀함수를 이용하여 가능한 모든 경우를 다 구하여 중복을 제거..
[백준 1021] 회전하는 큐 with Node.js
문제 링크 www.acmicpc.net/problem/1021 1021번: 회전하는 큐 첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가 www.acmicpc.net 풀이 const [n, m, ...arr] = require("fs").readFileSync("/dev/stdin").toString().trim().split(/\s/).map(v => +v); let count = 0; function Node(value) { this.value = value; this.prevNode = null; this.nextNode = null; } function..
[백준 10816] 숫자 카드 2 with Node.js
문제 링크 www.acmicpc.net/problem/10816 10816번: 숫자 카드 2 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10, www.acmicpc.net 풀이 const input = require("fs").readFileSync("/dev/stdin").toString().trim().split(/\s/); const n = parseInt(input[0]); const n_arr = input.slice(1, n+1); const [m, ...m_arr] = input.slice(n+1); const myMap ..
[백준 2217] 로프 with Node.js
문제 링크 www.acmicpc.net/problem/2217 2217번: 로프 N(1 ≤ N ≤ 100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다. 하 www.acmicpc.net 풀이 let [n, ...ropes] = require("fs").readFileSync("/dev/stdin").toString().trim().split("\n"); ropes = ropes.map(i => +i); ropes.sort((a, b) => a-b); let min = ropes[0]*n; for (let i=1; i