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

    [백준 1543] 문서 검색 with Node.js

    문제 링크 https://www.acmicpc.net/problem/1543 1543번: 문서 검색 세준이는 영어로만 이루어진 어떤 문서를 검색하는 함수를 만들려고 한다. 이 함수는 어떤 단어가 총 몇 번 등장하는지 세려고 한다. 그러나, 세준이의 함수는 중복되어 세는 것은 빼고 세야 한 www.acmicpc.net 풀이 const [doc, word] = require("fs").readFileSync("dev/stdin").toString().trim().split("\n"); let idx = 0; let count = 0; while (idx = 0) { count++;..

    [백준 1654] 랜선 자르기 with Python

    문제 링크 https://www.acmicpc.net/problem/1654 1654번: 랜선 자르기 첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그 www.acmicpc.net 풀이 import sys K, N = map(int, sys.stdin.readline().split()) lan = [int(sys.stdin.readline()) for _ in range(K)] def binary_search(lst): high = max(lst) low = 1 while low

    [백준 1302] 베스트셀러 with Node.js

    문제 링크 https://www.acmicpc.net/problem/1302 1302번: 베스트셀러 첫째 줄에 오늘 하루 동안 팔린 책의 개수 N이 주어진다. 이 값은 1,000보다 작거나 같은 자연수이다. 둘째부터 N개의 줄에 책의 제목이 입력으로 들어온다. 책의 제목의 길이는 50보다 작거나 같고 www.acmicpc.net 풀이 const [N, ...arr] = require("fs").readFileSync("/dev/stdin").toString().trim().split("\n"); let maxCount = 0; let maxName = ""; const dict = {}; arr.forEach(name => { if (dict[name]) dict[name]++; else dict[nam..

    [백준 15652] N과 M (4) with Python

    문제 링크 www.acmicpc.net/problem/15652 15652번: N과 M (4) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 풀이 n, m = map(int, input().split()) def nm(n, m, seq=[]): if len(seq) == m: print(" ".join(seq)) else: start = int(seq[-1]) if seq else 1 for i in range(start, n+1): nm(n, m, seq+[str(i)]) nm(n, m) 재귀함수를 통해 seq[-1]부터 n까지의 수를..

    [백준 3986] 좋은 단어 with Node.js

    문제 링크 www.acmicpc.net/problem/3986 3986번: 좋은 단어 이번 계절학기에 심리학 개론을 수강 중인 평석이는 오늘 자정까지 보고서를 제출해야 한다. 보고서 작성이 너무 지루했던 평석이는 노트북에 엎드려서 꾸벅꾸벅 졸다가 제출 마감 1시간 전에 www.acmicpc.net 풀이 const [N, ...arr] = require("fs").readFileSync("/dev/stdin").toString().trim().split("\n"); let count = 0; for (let word of arr) { if (word.length % 2 === 0) { let prevWord = word; let isGoodWord = true; while (prevWord) { const..

    [백준 15651] N과 M (3) with Python

    문제 링크 www.acmicpc.net/problem/15651 15651번: N과 M (3) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 풀이 n, m = map(int, input().split()) def nm(n, m, seq=[]): if len(seq) == m: print(" ".join(seq)) else: for i in range(1, n+1): nm(n, m, seq+[str(i)]) nm(n, m) 재귀함수를 통해 1부터 n까지의 수를 차례로 순회하면서 하나씩 seq에 추가하여 그 길이가 m만큼 되었을 때마다 출력..

    [백준 9656] 돌 게임 2 with Node.js

    문제 링크 www.acmicpc.net/problem/9656 9656번: 돌 게임 2 상근이가 게임을 이기면 SK를, 창영이가 게임을 이기면 CY을 출력한다. www.acmicpc.net 풀이 const input = +require("fs").readFileSync("/dev/stdin").toString().trim(); if (input % 2 === 0) console.log("SK"); else console.log("CY"); 돌이 2개 남았을 때 1개를 가져가고, 4개 남았을 때는 1개 또는 3개 어떻게 가져가도 승리한다. 둘이 번갈아서 돌을 가져가는데 가져가는 개수가 모두 홀수이므로, 돌의 개수가 짝수라면 먼저 시작하는 상근이는 항상 돌의 개수가 짝수로 남는 상황에 놓이기 때문에 항상 승..

    [백준 10799] 쇠막대기 with Python

    문제 링크 www.acmicpc.net/problem/10799 10799번: 쇠막대기 여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저 www.acmicpc.net 풀이 parenthesis = input().replace("()", "L") laser = [] count = 0 for i in parenthesis: if i == "(": laser.append(0) elif i == ")": cur_count = laser.pop() count += cur_count + 1 if laser: laser[-1] += cur_count else: if laser: lase..

    [백준 2331] 반복수열 with Node.js

    문제 링크 www.acmicpc.net/problem/2331 2331번: 반복수열 첫째 줄에 반복되는 부분을 제외했을 때, 수열에 남게 되는 수들의 개수를 출력한다. www.acmicpc.net 풀이 const [A, P] = require("fs").readFileSync("/dev/stdin").toString().trim().split(" ").map(v => +v); const arr = [A]; while (true) { const curNum = String(arr[arr.length-1]); const nextNum = curNum.split("").reduce((acc, v) => acc + Number(v)**P, 0); if (arr.includes(nextNum)) { console..

    [백준 14889] 스타트와 링크 with Python

    문제 링크 www.acmicpc.net/problem/14889 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net 풀이 import sys import itertools N = int(sys.stdin.readline()) skill = [[x for x in map(int, sys.stdin.readline().split())] for _ in range(N)] comb = map(set, itertools.combinations([x for x in range(N)], N//2)) min_diff = 100*(N-1)*2 for ..