[백준 알고리즘] 1158번: 요세푸스 문제 (JavaScript / JS / 자바스크립트)
·
알고리즘/백준
문제 요세푸스 문제는 다음과 같다. 1번부터 N번까지 N명의 사람이 원을 이루면서 앉아있고, 양의 정수 K(≤ N)가 주어진다. 이제 순서대로 K번째 사람을 제거한다. 한 사람이 제거되면 남은 사람들로 이루어진 원을 따라 이 과정을 계속해 나간다. 이 과정은 N명의 사람이 모두 제거될 때까지 계속된다. 원에서 사람들이 제거되는 순서를 (N, K)-요세푸스 순열이라고 한다. 예를 들어 (7, 3)-요세푸스 순열은 이다. N과 K가 주어지면 (N, K)-요세푸스 순열을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000) 출력 예제와 같이 요세푸스 순열을 출력한다. 예제 입력 7 3 예제 출력 문제 접근 예제 입출력인 [7,3]..
[백준 자바스크립트] node.js 환경에서 콘솔 입출력
·
알고리즘/백준
js로 백준 문제를 풀려고 봤더니 백준에서는 node.js 환경으로 코드를 제출해야 했다. 여기에 입출력 관련한 코드를 정리할 예정이다. node.js 콘솔 실행방법 터미널 Command 입력 -> node 파일이름.js 입출력 코드 // 1. 한줄, 공백 x, 하나만 입력 // ex) "hello" -> "hello" const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin }); rl.question('', (input) => { void answer(input); rl.close(); }); //답안 작성부분 function answer(input) { console.log(input..
[알고리즘] 그리디 알고리즘 (greedy algorithm)
·
알고리즘/개념
그리디 알고리즘 - 최적화 문제 데이터 간의 관계를 고려하지 않고 수행 과정에서 욕심내서 최소 또는 최댓값을 가진 데이터를 선택한다. (근시안적 선택) 동전 거스름돈 알고리즘 #의사코드 change=W, n500=n100=n50=n10=n1=0 // n500, n100, n50, n10, n1은 각각의 동전 카운트 while ( change ≥ 500 ) change = change-500, n500++ // 500원짜리 동전 수를 1 증가 while ( change ≥ 100 ) change = change-100, n100++ // 100원짜리 동전 수를 1 증가 while ( change ≥ 50 ) change = change-50, n50++ // 50원짜리 동전 수를 1 증가 while ( c..
[백준 알고리즘] 1874번: 스택 수열 (파이썬 / Python)
·
알고리즘/백준
문제 스택 (stack)은 기본적인 자료구조 중 하나로, 컴퓨터 프로그램을 작성할 때 자주 이용되는 개념이다. 스택은 자료를 넣는 (push) 입구와 자료를 뽑는 (pop) 입구가 같아 제일 나중에 들어간 자료가 제일 먼저 나오는 (LIFO, Last in First out) 특성을 가지고 있다. 1부터 n까지의 수를 스택에 넣었다가 뽑아 늘어놓음으로써, 하나의 수열을 만들 수 있다. 이때, 스택에 push하는 순서는 반드시 오름차순을 지키도록 한다고 하자. 임의의 수열이 주어졌을 때 스택을 이용해 그 수열을 만들 수 있는지 없는지, 있다면 어떤 순서로 push와 pop 연산을 수행해야 하는지를 알아낼 수 있다. 이를 계산하는 프로그램을 작성하라. 입력 첫 줄에 n (1 ≤ n ≤ 100,000)이 주어..
[백준 알고리즘] 4949번: 균형잡힌 세상 (파이썬 / Python)
·
알고리즘/백준
문제 세계는 균형이 잘 잡혀있어야 한다. 양과 음, 빛과 어둠 그리고 왼쪽 괄호와 오른쪽 괄호처럼 말이다. 정민이의 임무는 어떤 문자열이 주어졌을 때, 괄호들의 균형이 잘 맞춰져 있는지 판단하는 프로그램을 짜는 것이다. 문자열에 포함되는 괄호는 소괄호("()") 와 대괄호("[]")로 2종류이고, 문자열이 균형을 이루는 조건은 아래와 같다. 모든 왼쪽 소괄호("(")는 오른쪽 소괄호(")")와만 짝을 이뤄야 한다. 모든 왼쪽 대괄호("[")는 오른쪽 대괄호("]")와만 짝을 이뤄야 한다. 모든 오른쪽 괄호들은 자신과 짝을 이룰 수 있는 왼쪽 괄호가 존재한다. 모든 괄호들의 짝은 1:1 매칭만 가능하다. 즉, 괄호 하나가 둘 이상의 괄호와 짝지어지지 않는다. 짝을 이루는 두 괄호가 있을 때, 그 사이에 있..
[백준 알고리즘] 1181번: 단어 정렬 (파이썬 / Python)
·
알고리즘/백준
문제 알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오. 길이가 짧은 것부터 길이가 같으면 사전 순으로 입력 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. 출력 조건에 따라 정렬하여 단어들을 출력한다. 단, 같은 단어가 여러 번 입력된 경우에는 한 번씩만 출력한다. 예제 입력 13 but i wont hesitate no more no more it cannot wait im yours 예제 출력 i im it no but more wait wont yours cannot hesitate 문제 ..
[백준 알고리즘] 11653번: 소인수분해 (파이썬 / Python)
·
알고리즘/백준
문제 정수 N이 주어졌을 때, 소인수분해하는 프로그램을 작성하시오. 입력 첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다. 출력 N의 소인수분해 결과를 한 줄에 하나씩 오름차순으로 출력한다. N이 1인 경우 아무것도 출력하지 않는다. 예제 입력 72 예제 출력 2 2 2 3 3 정답 코드 import sys n = int(sys.stdin.readline()) i = 2 while n != 1: if n % i == 0: n /= i print(i) else: i+=1 11653번: 소인수분해 첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다. www.acmicpc.net
[백준 알고리즘] 10989번: 수 정렬하기 3 (파이썬 / Python)
·
알고리즘/백준
문제 N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 입력 첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다. 출력 첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다. 예제 입력 10 5 2 3 1 4 2 3 5 1 7 예제 출력 1 1 2 2 3 3 4 5 5 7 문제 접근 N의 개수의 범위가 (1 ≤ N ≤ 10,000,000)이므로, 단순히 정렬을 하면 시간초과가 날 것이다. 10000개의 배열을 만들고 들어오는 값만큼 1씩 해당 인덱스에 더해주면 된다. 정답 코드 import sys n = int(sys.stdin.readline..
[백준 알고리즘] 11650번: 좌표 정렬하기 (파이썬 / Python)
·
알고리즘/백준
문제 2차원 평면 위의 점 N개가 주어진다. 좌표를 x좌표가 증가하는 순으로, x좌표가 같으면 y좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. 출력 첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다. 예제 입력 5 3 4 1 1 1 -1 2 2 3 3 예제 출력 1 -1 1 1 2 2 3 3 3 4 정답 코드 import sys n = int(sys.stdin.readline()) b = [] for i in range(n): b.app..
[백준 알고리즘] 2941번: 크로아티아 알파벳 (파이썬 / Python)
·
알고리즘/백준
문제 예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z= 예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다. dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다. 입력 첫째 줄에 최대 100글자의 단어가 주어진다. 알파벳 소문자와 '-', '='로만 이루어져 있다. 단어는 크로아티아 알파벳으로 이루어져 있..