Python 202

[Python] 4881. 배열 최소합

# 배열 선택 함수 (진행할 행, 이전까지의 선택 숫자들의 합) def select(y, temp_sum): global min_sum # 행의 맨 마지막까지 갔을 경우 (더이상 갈 곳 없으면) if y == n: # 만약 여태 더한 값이 min_sum에 저장되어 있는 값보다 작다면 갱신하고 돌아가기 if temp_sum < min_sum: min_sum = temp_sum return # 여태 더한 값이 이미 min_sum에 저장되어있는 값보다 크다면 들어갈 필요 없어 돌아가 if min_sum

[Python] 4880. 토너먼트 카드 게임

asdf # 가위바위보 (1: 가위, 2: 바위, 3: 보) def game(c1, c2): # 가위바위보 버전 1 # c1이 이겼을 경우 혹은 비겼을 경우(c1이 인덱스가 작으므로 c1 반환) if cards[c1] == cards[c2] or cards[c1] % 3 == (cards[c2] + 1) % 3: return c1 # c2가 이겼을 경우 return c2 # 가위바위보 버전 2 # if (cards[c1] - cards[c2]) % 3 == 2: # return c2 # return c1 # 가위바위보 버전 3 # if cards[c1] == 1: # return c2 if cards[c2] == 2 else c1 # elif cards[c1] == 2: # return c2 if car..

[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