스택 6

문제 KOI 통신연구소는 레이저를 이용한 새로운 비밀 통신 시스템 개발을 위한 실험을 하고 있다. 실험을 위하여 일직선 위에 N개의 높이가 서로 다른 탑을 수평 직선의 왼쪽부터 오른쪽 방향으로 차례로 세우고, 각 탑의 꼭대기에 레이저 송신기를 설치하였다. 모든 탑의 레이저 송신기는 레이저 신호를 지표면과 평행하게 수평 직선의 왼쪽 방향으로 발사하고, 탑의 기둥 모두에는 레이저 신호를 수신하는 장치가 설치되어 있다. 하나의 탑에서 발사된 레이저 신호는 가장 먼저 만나는 단 하나의 탑에서만 수신이 가능하다. 예를 들어 높이가 6, 9, 5, 7, 4인 다섯 개의 탑이 수평 직선에 일렬로 서 있고, 모든 탑에서는 주어진 탑 순서의 반대 방향(왼쪽 방향)으로 동시에 레이저 신호를 발사한다고 하자. 그러면, 높이..

[PART2] CH.05_DFS/BFS

1. 꼭 필요한 자료구조 기초 탐색이란 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정을 의미한다. 프로그래밍에서는 그래프, 트리 등의 자료구조 안에서 탐색을 하는 문제를 자주 다룬다. 대표적인 탐색 알고리즘으로 DFS와 BFS를 꼽을 수 있다. 그런데 DFS와 BFS를 이해하기 위해서는 스택과 큐에 대한 이해가 전제되어야 하므로 사전 학습으로 스택과 큐, 재귀 함수를 먼저 알아보자. 자료구조란 '데이터를 표현하고 관리하고 처리하기 위한 구조'를 의미한다. 그중 스택과 큐는 자료구조의 기초 개념으로 다음의 두 핵심적인 함수로 구성된다. 삽입(push) : 데이터를 삽입한다. 삭제(pop) :데이터를 삭제한다. - 스택 : 후입선출(Last In Last Out : LIFO) 1 2 3 4 5 6 7 ..

그래프 깊이우선탐색(DFS), 너비우선탐색(BFS)

# 구현 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 import sys # 그래프 # 1 ----- 2 ----- 6 # \ / \ / # \ / 4 - 5 # \ / / \ # 3 - 7 - 8 - 9 # 1 -> 2 -> 3 -> 7 -> 4 -> 5 -> 6 -> 8 -> 9 # 9 12 (노드갯수, 간선정보) # 1 2 # 1 3 # 2 3 # 2 4 # 2 6 # 3 7 # 4 5 # 4 7 # 4 8 # 5 6 #..

괄호

문제 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 부른다. 한 쌍의 괄호 기호로 된 “( )” 문자열은 기본 VPS 이라고 부른다. 만일 x 가 VPS 라면 이것을 하나의 괄호에 넣은 새로운 문자열 “(x)”도 VPS 가 된다. 그리고 두 VPS x 와 y를 접합(concatenation)시킨 새로운 문자열 xy도 VPS 가 된다. 예를 들어 “(())()”와 “((()))” 는 VPS 이지만 “(()(”, “(())()))” , 그리고 “(()” 는 모두 VPS 가 아닌 문자열이다. 여러분은 입력으로 주어진 괄호 문자열..

스택 구현하기

문제 이 문제에서는 스택을 구현한다. 스택은 다음 세 개의 연산을 지원한다. Push X : 스택에 정수 X를 push한다. 만약 스택이 꽉 차서 push를 할 수 없다면, “Overflow”를 출력한다. Pop : 스택에서 정수 하나를 pop한다. 만약 스택이 비어있어서 pop을 할 수 없다면, “Underflow”를 출력한다. Top : 스택의 top에 있는 정수를 출력한다. 만약 스택이 비어있다면 “NULL”을 출력한다. 크기가 n인 스택에 m개의 연산을 하는 프로그램을 작성하시오. 입력의 편의를 위해서 Push는 “1”, Pop은 “2”, Top은 “3”으로 표현한다. 입력 첫째 줄에 스택의 크기 n, 연산의 개수 m이 주어진다. ( 1

[자료구조] : 스택(선형)

- 데이터를 제한적으로 접근할 수 있는 구조(LIFO) - 한 쪽 끝에서만 자료를 넣거나 뺄 수 있는 구조. 가장 나중에 쌓은 데이터를 가장 먼저 빼낼 수 있는 데이터 구조 - push() : 데이터를 스택에 삽입 - pop() : 데이터를 스택에서 꺼내기 - 장점 : 구조가 단순해서 구현이 쉽다., 데이터 저장/읽기 속도가 빠르다. - 단점 : 데이터 최대 갯수를 미리 정해야 한다., 파이썬의 경우 재귀함수는 1000번 까지만 호출가능하다. # 재귀함수 결과가 스택과 유사하다. def recursive(data): if data < 0: print('ended') else: print(data) recursive((data-1)) print('returned', data) recursive(4) ===..

반응형