목록문제/백준_파이썬 (155)
sm 기술 블로그
import sys input = sys.stdin.readline N = int(input()) A = list(map(int, input().split())) result = ["-1"] * N stack = [] for i in range(N): try: while A[stack[-1]] < A[i]: result[stack.pop()] = str(A[i]) except: pass stack.append(i) print(" ".join(result)) 문제요약 입력값에 오큰수를 구해라. 오큰수란? A=A1 ~ AN이 있을 때 Ai번째의 오큰수는 오른쪽에 있으면서 Ai보다 큰 수 중 가장 왼쪽에 있는 수이다. 다시 말해 지금 수 보다 크고, 인덱스 크기가 가장 작은 수 설명 입력 예시로 백준에 있는 ..
import sys input = sys.stdin.readline N = int(input()) cnt = 0 stack = [] result = [] for i in range(N): T = int(input()) while cnt < T: cnt += 1 stack.append(cnt) result.append("+") if stack[-1] == T: result.append("-") stack.pop() else: print("NO") stack.append(1) break if not stack: print("\n".join(result)) 문제요약 스택을 이용하여 입력 값이 되도록 해라 설명 while cnt < T: cnt += 1 stack.append(cnt) result.append(..
while True: S = input() stack = [] if(S == "."): break for val in S: if val == '[' or val == '(': stack.append(val) elif val == ']': if stack and stack[-1] == '[': stack.pop() else: stack.append(1) break elif val == ')': if stack and stack[-1] == '(': stack.pop() else: stack.append(1) break if not stack: print("yes") else: print("no") 문제요약 문자 형식이 맞는지 확인하고 맞으면 yes 틀리면 no를 출력하라. 설명 stack을 이용하면 쉽게 ..
import sys input = sys.stdin.readline T = int(input()) for i in range(T): stack = [] a = input() for j in a: if j == '(': stack.append(j) elif j == ')': try: stack.pop() except: stack.append(1) break if not stack: print("YES") else: print("NO") 문제요약 괄호가 형식이 맞으면 YES를 아니면 NO를 출력하라. 설명 간단한 문제이다. 입력받은 값을 앞에서 부터 뽑아내면서 만약 '('가 나오면 스택에 값을 넣고 ')'가 나온다면 스택에 있는 값을 빼낸다. [만약 뒤에서 부터 진행한다면 ')'값을 넣고 '('을 빼야할 것..