전체 글
-
[백준 1874번] 스택 수열Coding Test/백준 2021. 1. 5. 02:12
# 문제 내 풀이 from collections import deque n = int(input()) nums = deque([int(input()) for _ in range(n)]) # 주어진 수열을 큐 형태로 사용 stack = [] result = [] # 스택에 1 ~ n까지의 수를 오름차순으로 삽입 for i in range(1, n + 1): stack.append(i) result.append('+') # nums와 stack에 원소가 있고, nums의 첫번째 값이 stack의 최상단 값과 같다면 while nums and stack and nums[0] == stack[-1]: stack.pop() # 스택의 최상단 값 제거 nums.popleft() # 큐의 맨 앞에 있는 값 제거 re..
-
[백준 1966번] 프린터 큐Coding Test/백준 2021. 1. 5. 02:07
# 문제 내 풀이 from collections import deque t = int(input()) for num in range(t): n, m = map(int, input().split()) # 문서마다 중요도 입력 받음 importance = list(map(int, input().split())) # 각 문서의 순서와 중요도를 묶은 튜플을 원소로 갖는 큐 생성 queue = deque(enumerate(importance)) cnt = 0 # 인쇄 횟수 저장 while queue: pass_print = False idx, val = queue.popleft() # 만일 큐의 가장 앞 문서의 중요도보다 중요도가 높은 문서가 존재한다면 for i in range(len(queue)): if qu..
-
[백준 11866번] 요세푸스 문제 0Coding Test/백준 2021. 1. 5. 01:59
# 문제 내 풀이 n, k = map(int, input().split()) nums = [i for i in range(1, n + 1)] # 1 ~ n까지의 수를 오름차순으로 생성 queue = [] # 요세푸스 순열을 저장할 리스트 생성 idx = 0 # nums가 빌 때까지 while nums: idx = (idx + k - 1) % len(nums) # 수열에서 k번째 수의 인덱스 구하기 queue.append(nums.pop(idx)) # k번째 수를 제거하고 순열로 만듬 print('') 주목할 점 리스트를 str()하면 괄호 그대로 '[x, x, ...]'로 변환됨을 기억하자!
-
[백준 4949번] 균형잡힌 세상Coding Test/백준 2021. 1. 4. 21:59
# 문제 내 풀이 while True: string = input() # '.'이 입력되면 종료 if string == '.': break stack = [] for s in string: # 스택에 괄호가 존재할 때, 최상단이 '('이면서 ')'이 입력이거나 최상단이 '['이면서 ']'이 입력되는 경우 if stack and ((stack[-1] == '(' and s == ')') or (stack[-1] == '[' and s == ']')): stack.pop() # 스택의 최상단 괄호를 제거 # 위 경우가 아닐 때 s가 ()[]중 하나인 경우 스택에 삽입 elif s in "([)]": stack.append(s) if stack: print("no") else: print("yes")
-
[백준 9012번] 괄호Coding Test/백준 2021. 1. 4. 21:56
# 문제 내 풀이 t = int(input()) # 테스트 케이스 개수 저장 # 각 테스트 케이스에 대하여 알고리즘 수행 for num in range(t): ps = list(input()) stack = [ps.pop(0)] # 스택을 만들어 입력의 첫번째 괄호를 담음 for p in ps: # 스택에 괄호가 존재하며, 최상단에 있는 괄호가 '('이고 새로 스택에 들어오는 괄호가 ')'라면 if stack and stack[-1] == '(' and p == ')': stack.pop() # 스택의 최상단 괄호 제거 # 다른 경우 스택에 새로운 괄호를 삽입 else: stack.append(p) # 스택에 괄호가 남아있을 경우 if stack: print("NO") # 스택이 비어 있을 경우 else..
-
[백준 1012번] 유기농 배추Coding Test/백준 2021. 1. 4. 21:51
# 문제 내 풀이 - DFS와 BFS로 모두 구현해 봄 from collections import deque # bfs를 위한 큐 생성 라이브러리 import sys sys.setrecursionlimit(10000) # 파이썬 재귀 한도를 10000으로 늘림 (기존 재귀 한도: 1000) # dfs 정의 def dfs(x, y): graph[x][y] = -1 dx = [0, -1, 0, 1] dy = [1, 0, -1, 0] for i in range(4): next_x = x + dx[i] next_y = y + dy[i] if next_x = n or next_y = m: continue if graph[next_x][next_y] == 1: ..
-
[백준 2667번] 단지번호붙이기Coding Test/백준 2021. 1. 4. 21:44
# 문제 내 풀이 1 n = int(input()) graph = [list(map(int, input())) for _ in range(n)] # dfs 정의 def dfs(x, y, cnt): if x = n or y = n: return cnt if graph[x][y] == 1: graph[x][y] = -1 cnt += 1 cnt = dfs(x - 1, y, cnt) cnt = dfs(x + 1, y, cnt) cnt = dfs(x, y - 1, cnt) cnt = dfs(x, y + 1, cnt) return cnt return cnt h_cnt = 0 # 단지 개수 h_list = [] # 각 단지의 집의 개수 for i in range(n): for j ..