![전체 글](https://t1.daumcdn.net/tistory_admin/static/manage/images/r3/default_L.png)
전체 글
[백준 11656] 접미사 배열 with Node.js
문제 링크 www.acmicpc.net/problem/11656 11656번: 접미사 배열 첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 1,000보다 작거나 같다. www.acmicpc.net 풀이 const word = require("fs").readFileSync("/dev/stdin").toString().trim(); const suffix = []; for (let i=0; i
[백준 2193] 이친수 with Python
문제 링크 www.acmicpc.net/problem/2193 2193번: 이친수 0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않 www.acmicpc.net 풀이 import sys n = int(sys.stdin.readline()) dp = [0]*91 dp[1], dp[2] = 1, 1 for i in range(3, n+1): dp[i] = sum(dp[1:i-1]) + 1 print(dp[n]) 이친수는 0으로 시작할 수 없으므로 맨 앞자리 수는 반드시 1이다. 그리고 1이 두 번 연속 올 수 없으므로, 그 다음 자리수는 반드시 0이다..
[백준 10825] 국영수 with Node.js
문제 링크 www.acmicpc.net/problem/10825 10825번: 국영수 첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 1 www.acmicpc.net 풀이 let [n, ...arr] = require("fs").readFileSync("/dev/stdin").toString().trim().split("\n"); const names = []; arr = arr .map(v => v.split(" ").map(vv => Number(vv)||vv)) .sort((a, b) => { if (a[1] < b[1]) return ..
[백준 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))) 재귀함수를 이용하여 가능한 모든 경우를 다 구하여 중복을 제거..