Algorithm 211

[Python] 4874. Forth

tc = int(input()) for idx in range(1, tc+1): expression = list(input().split()) stack = [] result = 'error' # 결과 저장 변수 for e in expression: # e가 숫자일 경우 stack에 push. 나중 연산 편하게 하기 위해 int로 변환 if e.isdigit(): stack.append(int(e)) # e가 숫자 아닐 경우. 그리고 stack에 뽑을 숫자 있을 경우. elif stack: # 숫자 하나 뽑는다 num1 = stack.pop() # e가 연산자일 경우 if e in '*/+-' and stack: # 숫자 하나 더 뽑아와서 e에 해당하는 연산자에 맞게 계산 후 stack에 push num..

[Python] 1224. 계산기3

# 중위 표기법 -> 후위 표기법 변환 def infix_to_postfix(expression): cal = '' # 후위 표기법 받을 문자열 stack = [] # 스택 for e in expression: # e가 숫자라면 cal에 더하기 if e not in '(*/+-)': cal += e # e가 연산자라면 else: # e가 여는 괄호라면 stack에 push if e == '(': stack.append('(') # e가 '*' 또는 '/' 라면 elif e in '*/': # 스택 top의 연산자의 우선순위가 e의 우선순위보다 작을 때까지 # stack pop 하여 가져와서 cal에 더하기 while stack and stack[-1] in '*/': cal += stack.pop() #..

[Python] 1223. 계산기2

# 중위 표기법 -> 후위 표기법 변환 def infix_to_postfix(expression): cal = '' # 후위 표기법 받을 문자열 stack = [] # 스택 for e in expression: # e가 숫자라면 cal에 더하기 if e.isdigit(): cal += e # e가 연산자라면 else: # e가 '*' 라면 if e == '*': # 스택 top의 연산자의 우선순위가 e의 우선순위보다 작을 때까지 (+가 나올때까지) # stack pop 하여 가져와서 cal에 더하기 while stack and stack[-1] == '*': cal += stack.pop() # 이제 없다면 stack에 e를 push 한다. stack.append(e) # e가 '+' 라면 elif e ..

[Python] 11659. 구간 합 구하기 4

import sys input = sys.stdin.readline n, m = map(int, input().split()) # 수의 개수 n, 합을 구해야 하는 횟수 m numbers = list(map(int, input().split())) # n개의 수 # dp 리스트 만들기 dp = [0 for _ in range(n+1)] for i in range(n): dp[i+1] = dp[i] + numbers[i] for _ in range(m): i, j = map(int, input().split()) print(dp[j] - dp[i-1]) 풀이 먼저 dp[i+1]에 numbers[i]까지(numbers[:i+1])의 합을 저장하여 dp리스트를 만든다. i와 j가 주어졌을 때, i는 구간의 시..

Algorithm/Baekjoon 2021.09.19

[Python] 9095. 1, 2, 3 더하기

탑다운 방식 (재귀) tc = int(input()) dp_l = [0, 1, 2, 4] + [0 for _ in range(9)] # 11까지의 방법을 담을 리스트 # 규칙 : 정수 n을 1, 2, 3으로 나타낼 수 있는 방법 수 = 정수 n-3 , n-2, n-1 을 나타낼 수 있는 방법 수를 다 더한 것 # dp 함수 def dp(n): # 리스트에 현재 n을 나타낼 수 있는 방법의 수가 비어 있다면 if not dp_l[n]: # 정수 n-1의 방법의 수가 저장되어 있는지 확인 -> 안되어있다면 또 들어감 dp(n-1) # n-1까지 다 저장되어 있으면 현재 n의 정수를 나타낼 수 있는 방법의 수 저장. dp_l[n] = dp_l[n-3] + dp_l[n-2] + dp_l[n-1] for i in..

Algorithm/Baekjoon 2021.09.19

[Python] 삼성시의 버스노선

t = int(input()) for idx in range(1, t+1): print('#{}'.format(idx), end=' ') # 버스 노선 n개 n = int(input()) # 버스 노선 받아오기 bus_lines = [] for _ in range(n): d, a = map(int, input().split()) # 출발 노선, 도착 노선 bus_lines.append(list(range(d, a+1))) # d이상, a 이하인 모든 정류장을 다니므로 해당 정류장을 리스트로 만들어 넣어준다. # 검토할 버스 정류장 p개 p = int(input()) for _ in range(p): c = int(input()) # 버스 정류장 cnt = 0 # 버스 정류장을 지나는 버스 노선의 개수 #..

[Python] 5432. 쇠막대기 자르기

t = int(input()) for idx in range(1, t+1): iron_bar = list(input())[::-1] # pop사용할건데 걍 편하게 생각하기 위해 뒤집어줌. temp_bar = 0 # 쇠막대기가 생기면 count total_bar = 0 # 총 쇠막대기 개수 b1 = iron_bar.pop() # 괄호 받아오기 while iron_bar: b2 = iron_bar.pop() # 괄호 받아오기 # 만약 받아온 괄호 두개가 '()'으로 레이저라면 if (b1, b2) == ('(', ')'): total_bar += temp_bar # 생성된 막대기들만큼 조각나니까 총 쇠막대기 개수에 더해주기 b1 = iron_bar.pop() # 레이저의 다음 괄호로 넘어간다. # 레이저 아..