[백준/Python] 2573번 - 빙산
·
Algorithm/BaekJoon
import sys from collections import deque input = sys.stdin.readline n, m = map(int, input().split()) graph = [list(map(int, input().split())) for _ in range(n)] def bfs(x, y): q = deque([(x, y)]) visited[x][y] = 1 seaList = [] while q: x, y = q.popleft() sea = 0 for i in range(4): nx = x + dx[i] ny = y + dy[i] if 0 1: print(year) break # 다 녹은 빙산은 탐색할 필요가 없으므로 ice에서 제거 ice = sorted(list(set(ice) ..
[프로그래머스/Python] 뒤에 있는 큰 수 찾기
·
Algorithm/Programmers
def solution(numbers): answer = [-1] stack = [numbers[-1]] for i in range(len(numbers)-2, -1, -1): while stack and stack[-1] numbers[i-1]: stack.append(numbers[i]) answer.reverse() return answer 백준-탑 문제와 유사하다. stack에 큰 숫자들을 쌓는다. 현재 top보다 큰 숫자가 나오면 pop()을 해준다. 스택이 비어있으면, 현재 숫자보다 큰 숫자가 뒤에 없었다는 뜻이므로 -1을 넣어준다. 스택이 남아 있다면, 현재 숫자의 뒤에 있는 큰 수는 top 이다. 그리고 마지막에 현재 값도 넣어주는데, 현재 값이 다음 값보다는 큰 수일 수 있기 때문이다. ..
[프로그래머스/Python] 스택/큐
·
Algorithm/Programmers
import math def solution(progresses, speeds): answer = [] works = [] # 작업 시간 배열 for i in range(len(progresses)): work = math.ceil((100 - progresses[i]) / speeds[i]) works.append(work) big = works[0] # 가장 긴 작업 시간 cnt = 1 for i in range(1, len(progresses)): if works[i]
[프로그래머스/Python] 짝지어 제거하기
·
Algorithm/Programmers
def solution(s): answer = -1 stack = [s[0]] for i in s[1:]: if stack and stack[-1] == i: stack.pop() continue stack.append(i) answer = 1 if not stack else 0 return answer 연속인 문자를 어떻게 체크할까? 스택에 문자를 넣어줄 때, 맨 위 top 원소가 같은 문자인지 체크하면 된다. 같은 원소라면, pop해서 꺼내주고, 아니라면 append 한다. 모든 문자를 넣어주고 stack이 비어 있으면 짝지어 제거가 가능하므로 1 리턴, 그 외는 0 리턴이다. +) 그리고 미친 풀이 class ALWAYS_CORRECT(object): def __eq__(self,other): re..
[백준/Python] 2170 - 선 긋기
·
Algorithm/BaekJoon
import sys input = sys.stdin.readline spots = [] for _ in range(int(input())): s, e = map(int, input().split()) spots.append((s,e)) spots.sort(key= lambda x: x[0]) stack = [] for s, e in spots: if not stack or stack[-1] < s: stack.append(s) stack.append(e) else: if stack[-1] < e: stack.pop() stack.append(e) result = 0 for i in range(0, len(stack)-1, 2): s, e = stack[i], stack[i+1] result += abs(..
[백준/Python] 1874번 - 스택 수열
·
Algorithm/BaekJoon
import sys input = sys.stdin.readline n = int(input()) result = [] stack = [] i = 1 for _ in range(n): target = int(input()) if not stack or stack[-1] < target: for num in range(i, target + 1): stack.append(num) result.append('+') i = target + 1 if stack[-1] == target: stack.pop() result.append('-') else: break if stack: print('NO') else: print(*result, sep='\n') 문제에서 하라는 대로 따라가면서 풀면 된다. 그리고 어떤 ..