본문 바로가기

Algorithm

(61)
[백준] 1874번: 스택 수열 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 input으로 들어온 수열을 저장하는 큐(q), 그리고 스택(st)을 선언해서 사용했다. 숫자가 1~n까지 오름차순으로 증가하므로, for문으로 i=1~n까지 차례로 대입해준다. for문이 돌 때마다 q.front()와 st.top()을 검사하는데, 여기서 q.front()는 현재 만들어야 하는 수열의 수를 담고 있..
[알고리즘] 그래프 DFS, BFS를 공부하기 전 먼저 그래프에 대해 간략하게 정리하고자 한다. 그래프란, 위 그림과 같이 정점(vertex)과 간선(edge)로 이루어진 자료구조이다. 간선은 정점의 ordered pair로 표현한다. 예를들어 (u,v)는 u에서 v로 향하는 간선을 뜻한다. 그래프는 무방향 그래프(undirected graph)와 방향 그래프(directed graph)로 나뉘어진다. 방향 그래프에서 간선은 방향성을 가지고 있으며, 화살표 모양으로 표현된다. directed graph에서는 self-loop(자기 자신에서 자기 자신을 가리키는 간선)도 가능하다. 1. Adjacency 간선 (u,v)가 있을 때, 정점 v를 정점 u의 adjacency라고 한다. undirected graph에서는 인접 관..
[백준] 5076번: Web Pages https://www.acmicpc.net/problem/5076 5076번: Web Pages Input will consist of a number of lines of HTML code, each line containing from 0 to 255 characters. The last line will contain a single # character – do not process this line. Within the text of each line will be zero or more tags. No angle bracket will b www.acmicpc.net 괄호검사와 비슷한 맥락으로 스택만 사용하면 쉽게 풀 수 있는 문제이다. 하지만 문자열 파싱이 필요하므로 훨씬 복잡해진 문제. 파..
[백준] 2304번: 창고 다각형 https://www.acmicpc.net/problem/2304 2304번: 창고 다각형 첫 줄에는 기둥의 개수를 나타내는 정수 N이 주어진다. N은 1 이상 1,000 이하이다. 그 다음 N 개의 줄에는 각 줄에 각 기둥의 왼쪽 면의 위치를 나타내는 정수 L과 높이를 나타내는 정수 H가 한 개의 빈 칸을 사이에 두고 주어진다. L과 H는 둘 다 1 이상 1,000 이하이다. www.acmicpc.net 일단 막대 정보를 배열에 저장한 뒤, 막대를 왼쪽부터 오른쪽으로 훑으며 top보다 막대가 긴 경우 스택1에 push 해준다(다각형의 왼쪽 영역) 그 다음 이번엔 막대를 오른쪽부터 왼쪽으로 훑으며 top보다 막대가 긴 경우 스택2에 push 해준다(다각형의 오른쪽 영역) 탐색이 끝난 후, 스택1과 스택2..
[백준] 1725번: 히스토그램 https://www.acmicpc.net/problem/1725 1725번: 히스토그램 문제 히스토그램에 대해서 알고 있는가? 히스토그램은 아래와 같은 막대그래프를 말한다. 각 칸의 간격은 일정하고, 높이는 어떤 정수로 주어진다. 위 그림의 경우 높이가 각각 2 1 4 5 1 3 3이다. 이러한 히스토그램의 내부에 가장 넓이가 큰 직사각형을 그리려고 한다. 아래 그림의 빗금 친 부분이 그 예이다. 이 직사각형의 밑변은 항상 히스토그램의 아랫변에 평행하게 그려져야 한다. 주어진 히스토그램에 대해, 가장 큰 직사각형의 넓이를 구하는 프로그램을 www.acmicpc.net 스택 연습문제 어처구니 없는 실수로 시간을 많이 잡아먹은 문제이다. 스택의 top 보다 높이가 높은 경우에만 스택에 push하고 (이렇게..
[백준] 1935번: 후위 표기식2 https://www.acmicpc.net/problem/1935 1935번: 후위 표기식2 첫째 줄에 피연산자의 개수(1 ≤ N ≤ 26) 가 주어진다. 그리고 둘째 줄에는 후위 표기식이 주어진다. (여기서 피연산자는 A~Z의 영대문자이며, A부터 순서대로 N개의 영대문자만이 사용되며, 길이는 100을 넘지 않는다) 그리고 셋째 줄부터 N+2번째 줄까지는 각 피연산자에 대응하는 값이 주어진다. (3번째 줄에는 A에 해당하는 값, 4번째 줄에는 B에 해당하는값 , 5번째 줄에는 C ...이 주어진다, 그리고 피연산자에 대응 하는 값은 정수이다) www.acmicpc.net 후위 표기식으로 쓰여진 식을 계산하는 문제. 중위 표기식을 후위 표기식으로 변환해야 했던 이전문제보다 훨씬 쉽다. 식의 글자를 하나씩..
[백준] 1918번: 후위 표기식 https://www.acmicpc.net/problem/1918 1918번: 후위 표기식 첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 A~Z의 문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의 수식은 주어지지 않는다. 표기식은 알파벳 대문자와 +, -, *, /, (, )로만 이루어져 있으며, 길이는 100을 넘지 않는다. www.acmicpc.net 스택 하면 무조건 나오는 중위 표기식을 후위 표기식으로 바꾸는 문제 자료구조 시간에도 배웠지만 연습삼아 풀어보았다. 연산자별로 우선 순위를 정해놓고 식에서 연산자가 나오면 스택에 저장한다. 그리고 다음 연산자가 나올 때마다 스택의 연산자와 우선순위를 비교해서 작거..
[백준] 5430번: AC https://www.acmicpc.net/problem/5430 5430번: AC 문제 선영이는 주말에 할 일이 없어서 새로운 언어 AC를 만들었다. AC는 정수 배열에 연산을 하기 위해 만든 언어이다. 이 언어에는 두 가지 함수 R(뒤집기)과 D(버리기)가 있다. 함수 R은 배열에 있는 숫자의 순서를 뒤집는 함수이고, D는 첫 번째 숫자를 버리는 함수이다. 배열이 비어있는데 D를 사용한 경우에는 에러가 발생한다. 함수는 조합해서 한 번에 사용할 수 있다. 예를 들어, "AB"는 A를 수행한 다음에 바로 이어서 B를 수행하는 함수이다. www.acmicpc.net 문제는 간단하다 숫자 리스트를 입력받은 후, R이면 리스트의 순서를 뒤집어주고 D면 맨 앞 원소를 버린다. 덱을 이용하면 굳이 리스트의 순서..