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

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

    [백준 1436] 영화감독 숌 with Node.js

    문제 링크 www.acmicpc.net/problem/1436 1436번: 영화감독 숌 666은 종말을 나타내는 숫자라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타 www.acmicpc.net 풀이 const n = +require("fs").readFileSync("/dev/stdin").toString() let num = 666; let count = 1; while (count !== n) { num++; if (String(num).includes("666")) count++; } console.log(num); num을 1씩 늘려가면서 num내에 연속된 666이 존재할 때마다 ..

    [백준 1018] 체스판 다시 칠하기 with Node.js

    문제 링크 www.acmicpc.net/problem/1018 1018번: 체스판 다시 칠하기 첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다. www.acmicpc.net 풀이 const [n, m, ...board] = require("fs").readFileSync("/dev/stdin").toString().trim().split(/\s/); const lines = ["WBWBWBWB", "BWBWBWBW"] let min = 64; for (let i=0; i

    [백준 2108] 통계학 with Python

    문제 링크 www.acmicpc.net/problem/2108 2108번: 통계학 첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다. www.acmicpc.net 풀이 import sys n = int(sys.stdin.readline()) lst = [0 for x in range(8001)] for i in range(n): lst[int(sys.stdin.readline())+4000] += 1 # 산술평균 print(round(sum([(x-4000)*lst[x] for x in range(8001)])/n)) # 중앙값 a, b, mid = 0, 0, n//2+1 if lst[0] >=..

    [백준 10814] 나이순 정렬 with Node.js

    문제 링크 www.acmicpc.net/problem/10814 10814번: 나이순 정렬 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 www.acmicpc.net 풀이 const [n, ...members] = require("fs").readFileSync("/dev/stdin").toString().trim().split("\n"); console.log( members .map(v => ({age: parseInt(v.split(" ")[0]), name: v.split(" ")[1]})) .sort((a, b) => a.age - b.age) .map(v =..