Data Structure 25

[백준 10799번] 쇠막대기

10799번: 쇠막대기 여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저 www.acmicpc.net # 괄호가 쌍을 이뤄서 pop될 때마다 +1 # 레이저인 경우 +현재 스택에 쌓인 개수 datas = list(input()) stack = [] answer = 0 for i,data in enumerate(datas): if data == '(': stack.append(data) elif data == ')': if datas[i-1] == '(': # 레이저인 경우 answer += (len(stack)-1) stack.pop() else: # 막대기가 끝난 경우 a..

[백준 4949번] 균형잡힌 세상

4949번: 균형잡힌 세상 각 문자열은 마지막 글자를 제외하고 영문 알파벳, 공백, 소괄호("( )"), 대괄호("[ ]")로 이루어져 있으며, 온점(".")으로 끝나고, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마지막에 www.acmicpc.net answer = [] def check_balanced(string): stack = [] for element in string: if element == '(' or element == '[': stack.append(element) elif element == ')': if not stack: return False else: if stack[-1] == '(': stack.pop() else: return False elif elem..

[백준 9012번] 괄호

9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net t = int(input()) inputs = [list(input()) for _ in range(t)] def check_vps(str): stack = [] for element in str: if element == '(': stack.append(element) elif element == ')': if not stack: # 스택이 비어있는 경우 return False else: stack.pop() if stack: r..

[백준 17298번] 오큰수

17298번: 오큰수 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다. www.acmicpc.net n = int(input()) elements = list(map(int,input().split())) stack = [] answer = [] for i in range(n-1,-1,-1): while True: if len(stack) == 0: answer.append(-1) stack.append(elements[i]) break if elements[i] < stack[-1]: answer.append(stack[-1]) stack.append(elements[i..

[Graph] 그래프의 정의 및 Python 구현방법

1) 그래프의 정의 위 그림처럼 도시와 도시 사이를 연결하는 도로나 컴퓨터 네트워크 또는 사람의 인맥 관계처럼 어떤 관계(relationships)를 표현하는 수학 구조를 그래프라고 한다. 도시, 컴퓨터, 사람 등을 노드(node 또는 vertex)라 하고, 이들을 연결하는 도로, 네트워크, 인맥 등을 간선(edges)이라 한다. (많은 자료에서 노드 대신 정점(vertex)이라는 용어를 사용한다.) 그래프는 '노드의 집합'과 '간선의 집합'으로 구성된다. 이것을 수학으로 표현하면 위와 같다. 예를 들어 아래 그림과 같은 그래프를 G=(V,E)라고 하면, V와 E는 위와 같다. 2) 그래프의 종류 그래프의 종류가 매우 많지만, 우리는 간단하게 세 종류만 공부한다. 그리고, 어떤 노드가 다시 자신과 연결되..

[프로그래머스 Lv.3] 가장 먼 노드

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr from collections import deque def solution(n, edge): answer = 0 graph = [[] for _ in range(n+1)] visited = [False]*(n+1) route = [] for start,end in edge: graph[start].append(end) graph[end].append(start) def bfs(index): visited[index] = True queue = deque([(index,0)]) route.append((ind..

[프로그래머스 Lv.2] 다리를 지나는 트럭

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr def solution(bridge_length, weight, truck_weights): time = 0 queue = [] while truck_weights or queue: time += 1 if queue: queue = [(x[0],x[1]-1) for x in queue if x[1]-1 != 0] if truck_weights and sum([x[0] for x in queue]) + truck_weights[0]

[프로그래머스 Lv.2] 프로세스

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr def solution(priorities, location): answer = 0 queue = [(i,value) for i,value in enumerate(priorities)] while queue: index, priority = queue.pop(0) if queue and max([x[1] for x in queue]) > priority: queue.append((index,priority)) continue answer += 1 if index == location: return answer..

[프로그래머스 Lv.2] 기능개발

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr from collections import deque def solution(progresses, speeds): answer = [] length = len(progresses) while len(progresses) > 0: count = 0 remain = 100-progresses[0] if remain%speeds[0] != 0: remain = remain // speeds[0] + 1 else: remain = remain // speeds[0] progresses = [value+(remain*..

[프로그래머스 Lv.2] 올바른 괄호

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr def solution(s): answer = True stack = [] for item in s: if len(stack) == 0: stack.append(item) elif stack[-1] == '(': if item == ')': stack.pop() elif item == '(': stack.append(item) else: stack.append(item) if len(stack) != 0: return False return True 이번 문제는 괄호만 입력받는다는 조건 하에, 괄호가 올바르게..