연습장

    [백준 1260] DFS와 BFS with Python

    🔗 문제 링크 https://www.acmicpc.net/problem/1260 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사 www.acmicpc.net ✏️ 풀이 import sys from collections import deque class Graph: def __init__(self, n): self.graph = {x:[] for x in range(1, n+1)} def add(self, start, end): self.graph[start].append(end) self.graph[..

    [백준 2847] 게임을 만든 동준이 with Node.js

    문제 링크 https://www.acmicpc.net/problem/2847 2847번: 게임을 만든 동준이 학교에서 그래픽스 수업을 들은 동준이는 수업시간에 들은 내용을 바탕으로 스마트폰 게임을 만들었다. 게임에는 총 N개의 레벨이 있고, 각 레벨을 클리어할 때 마다 점수가 주어진다. 플레이어 www.acmicpc.net 풀이 const [N, ...score] = require("fs").readFileSync("/dev/stdin").toString().trim().split("\n").map(v => +v); let count = 0; for (let i=N-1; i>0; i--) { if (score[i-1] >= score[i]) { count += score[i-1] - score[i] + ..

    [백준 1015] 수열 정렬 with Node.js

    문제 링크 https://www.acmicpc.net/problem/1015 1015번: 수열 정렬 P[0], P[1], ...., P[N-1]은 0부터 N-1까지(포함)의 수를 한 번씩 포함하고 있는 수열이다. 수열 P를 길이가 N인 배열 A에 적용하면 길이가 N인 배열 B가 된다. 적용하는 방법은 B[P[i]] = A[i]이다. 배열 A가 주 www.acmicpc.net 풀이 const input = require("fs").readFileSync("/dev/stdin").toString().trim().split(/\s/); const N = +input[0]; const A = input.slice(1).map(v => +v); const sortedA = A.slice().sort((a, b) ..

    [백준 1676] 팩토리얼 0의 개수 with Python

    문제 링크 https://www.acmicpc.net/problem/1676 1676번: 팩토리얼 0의 개수 N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오. www.acmicpc.net 풀이 N = int(input()) dp = [0]*(N+1) dp[0] = 1 for i in range(1, N+1): dp[i] = dp[i-1]*i num = str(dp[N])[::-1] for i in range(len(num)): if num[i] != "0": print(i) break dp에 이전 팩토리얼을 저장하여 다음 팩토리얼을 빠르게 구하도록 하고, dp[N]의 뒤에서부터 0이 몇 개인지 세서 출력하였다.

    [백준 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만큼 되었을 때마다 출력..