분류 전체보기 44

[백준] 2164번 카드2 [JAVA]

https://www.acmicpc.net/problem/2164 2164번: 카드2 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 www.acmicpc.net 문제 문제 풀이 전형적인 큐 문제이다. 첫 번째 수는 버리고, 두 번째 수는 맨 뒤로 보내 순서를 바꾸는 것을 반복하면 된다. 앞과 뒤가 있으므로 큐를 활용하는 것이 가장 좋다. 푼 방법 1. 큐를 만든다(qu) 2. 1부터 N까지 순서대로 qu에 넣어준다. (front = 1 , back = N) 3. while문을 통해 qu의 size가 1이 될 때까지(size가 1이 되면 break해준다.)..

백준 문제풀이 2022.09.14

[백준] 1158번 요세푸스 문제 [JAVA]

https://www.acmicpc.net/problem/1158 1158번: 요세푸스 문제 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000) www.acmicpc.net 문제 문제 풀이 전형적인 큐 문제이다. 순서대로 k번째 사람에 접근해야되는데, 큐 문제가 될 수 있는 이유는 Circular queue를 생각하면 된다. 원을 이루고 있기 때문에, 1번째부터 k-1번째 사람을 순서대로 뒤로 붙여, 순서를 뒤로 미루는 방식으로 접근하면 된다. k번째 사람이 1번째 순서가 될 때까지 앞의 사람들을 다 뒤로 보내고 k번째 사람이 1번째 순서가 되면 해당 사람을 빼버리면 된다. 푼 방법 1. 큐를 두 개 만든다.(qu, qu2) 2. 1부터 N까지 순서대로 qu..

백준 문제풀이 2022.09.14

[백준] JAVA로 백준 입력 받는 방법

scanner 보다 BufferedReader가 빠르기 때문에 필자는 BufferedReader만 쓴다. BufferedReader 백준 문제풀이를 할때, 처음에 제일 어려웠던 건 입력 받는 방법 자체였다. 그렇기 때문에 BufferedReader를 통해 어떻게 입력을 받을 수 있는지 정리해보자. import 해야하는 것들 // 기본적으로 import 해야하는 패키지들 import java.io.IOException; import java.io.BufferedReader; import java.io.InputStreamReader; // 공백을 기준으로 한 줄을 나눠서 받고 싶을 때 import java.util.StringTokenizer; main public static void main(Strin..

백준 문제풀이 2022.09.14

[백준] 10845번 큐 [JAVA]

https://www.acmicpc.net/problem/10845 10845번: 큐 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 문제 문제 풀이 백준 10828번 스택과 매우 유사한 구현 문제이다. 큐(queue)와 스택(stack)의 차이를 알고 있다면 구현에 어려움은 없을 것이다. 큐와 스택의 차이는 큐는 FIFO(First In, First Out), 스택은 LIFO(Last In, First Out), 즉 선입선출, 후입선출의 차이가 있다는 걸 알아야한다. LIFO : 스택의 후입 선출은 들어온게, ..

백준 문제풀이 2022.09.13

3. 큐 Queues

Queues란? FIFO(First In, First Out) 선입 선출 리스트의 제한된 형태 : 한쪽 끝에서만 넣고, 다른 쪽 끝에서만 뺀다. Enqueue(넣기) Dequeue(빼기) Front(맨 앞의 값) Rear(맨 뒤의 값) Array-based Queue의 경우 다음과 같이 계속해서 사용하게 되면, 배열의 한쪽 끝으로 점점 이동하게 된다는 문제점이 있다. 따라서 아래와 같이 실행하였을 때, 영구적으로 배열을 사용할 수 있게 된다. 그림처럼 배열을 원이라고 생각하고, 한쪽 끝으로 점점 이동했을 때, 다시 맨 앞으로 돌아가서 재활용하는 방법을 사용하면 된다. 이를 코드로 생각해보면, 아래의 코드처럼 사용할 수 있다. enqueue(E item){ rearIdx = (rearIdx+1) % si..

자료구조 2022.09.13

[백준] 9012번 괄호 [JAVA]

https://www.acmicpc.net/problem/9012 9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net 문제 문제 풀이 생각을 잘못해서 한 번 틀린 문제이다. 처음 생각, 1. size를 0으로 초기화한다. 2. '('의 경우 size에 1을 더해주고, ')'의 경우 size에 1을 빼준다. 3. size가 0이면 VPS이고, size가 1이면 VPS가 아니다. 처음 생각의 잘못된 점 : VPS는 "()"가 한 쌍을 이룬다. 그치만 처음 생각으로 풀게 되었을 경우 ")..

백준 문제풀이 2022.09.13

[백준] 10828번 스택 [JAVA]

https://www.acmicpc.net/problem/10828 10828번: 스택 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 문제 문제 풀이 스택의 구현 문제이다. 기존의 스택을 import해오는 것이 아닌 직접 구현하는 방식으로 하자. 푼 방법 1. 구현 시 노드(링크)와 배열을 통해 구현이 가능한데, 배열로 구현하도록 하였다. 2. 배열로 구현시 각 명령에 대해 어떻게 하는지 보도록 하자. *size의 초기값을 -1로 설정하였는데, 그 이유는 인덱싱을 할 때 size를 변형하지 않고 사용하고 싶었기..

백준 문제풀이 2022.09.13

[백준] 10773번 제로 [JAVA]

https://www.acmicpc.net/problem/10773 10773번: 제로 첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경 www.acmicpc.net 문제 문제 풀이 전형적인 스택 문제이다. 0일 경우 pop을 해주고 나머지의 경우 push만 해주면 된다. 푼 방법 1. stack을 생성한다. 2. if else 구문을 사용하여 입력된 수가 0인 경우, stack.pop()을 해준다. 3. 입력된 수가 0 이외의 수을 경우, stack.push()을 해준다. JAVA code import java.io.IOEx..

백준 문제풀이 2022.09.11

[백준] 1874번 스택 수열 [JAVA]

https://www.acmicpc.net/problem/1874 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net 문제 문제 풀이 전형적인 스택 문제이다. 자바의 경우 stack을 import해와서 사용하면 된다. 스택엔 push, pop, peek의 기능이 있다.(자바의 경우) push는 스택에 자료를 넣고, pop은 스택에서 자료를 뺀다. peek은 스택의 가장 나중에 들어간 자료를 보여만 주는 기능을 한다. NO가 나오는 ..

백준 문제풀이 2022.09.11

[JS] 바닐라JS 날짜 계산하기

해당 글은 노마드 코더의 '바닐라JS' 챌린지의 내용 정리입니다. 실행 화면 주의했던 점 Seconds 부분과 Minutes 부분은 00분 00초의 형태가 되도록 한다. (ex. 6분 6초면 06분 06초 남았습니다. 와 같은 형식으로...) HTML code Time Until Christmas Eve clock 헤맨 부분 div와 h1, h2를 id가 아닌 class로 하니 이상하게 querySelector로 불러와서 style을 지정하는게 되질 않았다. 해결 과정에서 얻은 지식 div의 배치 querySelector가 아닌 getElementById로 class가 아닌 id를 사용하니 훨씬 수월해졌다. 이후 코드로 살펴보자. JavaScript[JS] const clock = document.get..

javascript/실습 2022.09.08