연습장
[백준 2609] 최대공약수와 최소공배수 with Node.js
문제 링크 www.acmicpc.net/problem/2609 2609번: 최대공약수와 최소공배수 첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다. www.acmicpc.net 풀이 const [a, b] = require("fs").readFileSync("/dev/stdin").toString().trim().split(" ").map(i=>parseInt(i)); let i = a; let j = b; while (i % j !== 0) { let n = i % j; if (n !== 0) { i = j; j = n; } } console.log(j) console.log(a*b/j) 유클리드 호제법을 활용하여 최대공약수를 구한다. 그..
[백준 2164] 카드2 with Python
문제 링크 www.acmicpc.net/problem/2164 2164번: 카드2 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 www.acmicpc.net 풀이 import sys from collections import deque dq = deque([x for x in range(1, int(sys.stdin.readline())+1)]) while len(dq) > 1: dq.popleft() dq.append(dq.popleft()) print(dq[0]) deque에 1부터 n까지 정수를 입력하고 카드를 빼고 옮기는 행위를 deque에 카드가..
[백준 10988] 팰린드롬인지 확인하기 with Node.js
문제 링크 www.acmicpc.net/problem/10988 10988번: 팰린드롬인지 확인하기 첫째 줄에 단어가 주어진다. 단어의 길이는 1보다 크거나 같고, 100보다 작거나 같으며, 알파벳 소문자로만 이루어져 있다. www.acmicpc.net 풀이 const word = require("fs").readFileSync("/dev/stdin").toString().trim(); const len = word.length/2; const left = word.slice(0, parseInt(len)); const right = word.slice(Number.isInteger(len)?len:parseInt(len)+1); if (left === right.split("").reverse().jo..
[백준 10798] 세로읽기 with Node.js
문제 링크 www.acmicpc.net/problem/10798 10798번: 세로읽기 총 다섯줄의 입력이 주어진다. 각 줄에는 최소 1개, 최대 15개의 글자들이 빈칸 없이 연속으로 주어진다. 주어지는 글자는 영어 대문자 ‘A’부터 ‘Z’, 영어 소문자 ‘a’부터 ‘z’, 숫자 ‘0’ www.acmicpc.net 풀이 const words = require("fs").readFileSync("/dev/stdin").toString().trim().split("\n"); const maxLength = Math.max(...words.map(i => i.length)); let vertical = ""; for (let i=0; i i.length));와 같음
[백준 11653] 소인수분해 with Python
문제 링크 www.acmicpc.net/problem/11653 11653번: 소인수분해 첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다. www.acmicpc.net 풀이 import sys n = int(sys.stdin.readline()) if n > 1: nums = [x for x in range(2, int(n**0.5)+1)] primes = [] while nums: prime = nums[0] for i in nums: if i % prime == 0: nums.remove(i) if prime not in primes: primes.append(prime) while n > 1: if primes: if n % primes[0] == 0: n //= primes[0..
[백준 1977] 완전제곱수 with Node.js
문제 링크 www.acmicpc.net/problem/1977 1977번: 완전제곱수 M과 N이 주어질 때 M이상 N이하의 자연수 중 완전제곱수인 것을 모두 골라 그 합을 구하고 그 중 최솟값을 찾는 프로그램을 작성하시오. 예를 들어 M=60, N=100인 경우 60이상 100이하의 자연수 중 완 www.acmicpc.net 풀이 const input = require("fs").readFileSync("/dev/stdin").toString().trim().split("\n"); const m = parseInt(input[0]); const n = parseInt(input[1]); const arr = []; for (let i=Math.ceil(Math.sqrt(m)); i acc + i, 0))..
[백준 2167] 2차원 배열의 합 with Python
문제 링크 www.acmicpc.net/problem/2167 2167번: 2차원 배열의 합 첫째 줄에 배열의 크기 N, M(1 ≤ N, M ≤ 300)이 주어진다. 다음 N개의 줄에는 M개의 정수로 배열이 주어진다. 배열에 포함되어 있는 수는 절댓값이 10,000보다 작거나 같은 정수이다. 그 다음 줄에는 www.acmicpc.net 풀이 const input = require("fs").readFileSync("/dev/stdin").toString().trim().split(/\s/); const n = input[0]; const names = input.slice(1); let spelling = names[0].split(""); for (let i=1; i
[백준 10773] 제로 with Python
문제 링크 www.acmicpc.net/problem/10773 10773번: 제로 첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경 www.acmicpc.net 풀이 import sys k = int(sys.stdin.readline()) arr = [] for i in range(k): n = int(sys.stdin.readline()) if n == 0: arr.pop() else: arr.append(n) print(sum(arr)) 0을 입력받으면 가장 마지막 요소를 제거하고(pop) 나머지는 맨 마지막에 추가(pu..
[백준 1373] 2진수 8진수 with Node.js
문제 링크 www.acmicpc.net/problem/1373 1373번: 2진수 8진수 첫째 줄에 2진수가 주어진다. 주어지는 수의 길이는 1,000,000을 넘지 않는다. www.acmicpc.net 풀이 let n = require("fs").readFileSync("/dev/stdin").toString().trim(); let oct = ""; while (n.length >= 3) { oct = parseInt(n.slice(n.length-3), 2).toString(8) + oct; n = n.slice(0, n.length-3); } console.log((n ? parseInt(n, 2).toString(8) : "") + oct); 세 자리수 2진수는 최대 7까지 나타낼 수 있어서(0..
[백준 10820] 문자열 분석 with Node.js
문제 링크 www.acmicpc.net/problem/10820 10820번: 문자열 분석 문자열 N개가 주어진다. 이때, 문자열에 포함되어 있는 소문자, 대문자, 숫자, 공백의 개수를 구하는 프로그램을 작성하시오. 각 문자열은 알파벳 소문자, 대문자, 숫자, 공백으로만 이루어져 있 www.acmicpc.net 풀이 const texts = require("fs").readFileSync("/dev/stdin").toString().split("\n"); if (texts[texts.length-1] === "") texts.pop(); texts.forEach(i => { let d = ""; [/[a-z]/g, /[A-Z]/g, /\d/g, /[ ]/g].forEach(reg => d += i.mat..