목록Stack (10)
나의 개발일지

문제 : https://www.acmicpc.net/problem/1874 🔑 스택 나열해야 하는 수 보다 현재 숫자가 같거나 작으면 스택에 넣어놓는다. + 스택 제일 위의 수가 나열해야 하는 수와 같으면 스택에서 꺼낸다. - +, - 를 바로 출력하지 않고 저장해 놓고 수열을 만들 수 있으면 출력을 한다. 끝 ✨ import sys input = sys.stdin.readline n = int(input()) numbers = [int(input()) for _ in range(n)] stack = [] idx = 1 answer = [] for i in numbers: while idx

문제 : https://school.programmers.co.kr/learn/courses/30/lessons/131704 🔑 스택 1번부터 나열된 박스(i)를 스택에 담는다. 스택의 맨 위 박스가 택배 기사가 원하는 박스면 빼서 트럭에 담는다. 원하는 박스가 아니면 다음 박스 담으러 이동 def solution(order): answer = 0 stack = [] # 보조 컨베이어 벨트 i = 1 while i < len(order)+1: stack.append(i) # 보조 컨베이어 벨트에 i번 박스 담음 while stack[-1] == order[answer]: # 보조 컨베이어 벨트 맨 위 박스가 택배 기사가 원하는 박스면 answer += 1 # 트럭에 담음 stack.pop() # 보조 컨..

문제 : https://school.programmers.co.kr/learn/courses/30/lessons/154539 🔑 스택 정답 리스트는 numbers의 길이만큼 -1로 초기화 스택에는 (인덱스, 값) 형태로 넣는다. 스택에 요소가 있고 현재 들어오는 수가 스택의 마지막 요소보다 크면 정답 리스트 업데이트하고 스택 마지막 요소 pop answer[stack[-1][0]] = numbers[i] while문으로 현재 들어오는 수보다 작은 값이 스택에 없을 때까지 반복함 def solution(numbers): answer = [-1] * len(numbers) stack = [] for i in range(len(numbers)): while stack and stack[-1][1] < numb..

문제 : https://www.acmicpc.net/problem/17299 🔑 스택, 입력받은 숫자 리스트 역순으로 순회 먼저 입력받은 숫자들의 개수를 센다. 리스트 순회하면서 count() 함수로 셀 수도 있지만 collections 모듈의 Counter 클래스로 간단하게 셀 수 있다. 리스트의 값을 역순으로 스택에 넣는 이유 스택에 현재 들어온 숫자의 바로 밑에 있는 숫자가 현재 들어온 숫자의 개수보다 많은 것 중 가장 왼쪽의 값으로 만들기 위함 from collections import Counter n = int(input()) numbers = list(map(int, input().split())) cnt = Counter(numbers) # 숫자의 개수 세기 stack = [] answer..

문제 : https://school.programmers.co.kr/learn/courses/30/lessons/64061 🔑 stack def solution(board, moves): answer = 0 stack = [] p = -1 # 스택 높이 for m in moves: for i in range(len(board)): if board[i][m-1] != 0: # 인형을 찾으면 stack.append(board[i][m-1]) # 스택에 넣고 board[i][m-1] = 0 # 인형을 없앤다. p += 1 # 스택 높이 증가 break if p >= 1: # 인형 2개 이상 쌓였고 if stack[p] == stack[p-1]: # 자신과 바로 밑 인형이 같으면 stack.pop() # 둘 다..

문제 : https://school.programmers.co.kr/learn/courses/30/lessons/42883 Greedy Stack 현재 위치 값(p)과 이전 값(p-1)을 비교해서 이전 값이 더 작으면 빼준다. 제거 횟수(k)가 남아있으면 완성된 스택에서 남아있는 제거 횟수만큼 제일 뒤의 값을 빼준다. def solution(number, k): num = list(map(int,number)) # 문자열을 정수 리스트로 변환 stack = [] # 스택 리스트 p = -1 # 스택 포인터(위치) for i in range(len(num)): stack.append(num[i]) # 스택에 요소 추가 p += 1 # 스택 위치 증가 if p >= 1: # 스택에 두 개 이상 있을 때 wh..

문제 : https://school.programmers.co.kr/learn/courses/15008/lessons/121685 def stack(gen, n): stack = [] while gen>1: stack.append(n%4) n //= 4 gen -= 1 while stack: num = stack.pop() if num == 0: return "RR" if num == 3: return "rr" return "Rr" def solution(queries): answer = [] for gen, n in queries: answer.append(stack(gen, n-1)) return answer

문제 : https://school.programmers.co.kr/learn/courses/30/lessons/76502 🔑 : 문자열 회전, 스택 def solution(s): answer = 0 for i in range(len(s)): x = s[i:] + s[:i] # 문자열 회전해서 x에 저장 stack = [] # 스택으로 사용할 빈 리스트 생성 st = -1 # 스택의 시작점 -1로 지정 for j in range(len(x)): # 회전한 문자열을 반복 if stack == [] or st == -1: # 스택이 비었거나 시작점이 -1이면 무조건 하나 추가 stack.append(x[j]) # 스택에 괄호 하나 넣기 st += 1 # 스택 높이 올리기 elif x[j] == ")" : #..