practivceAlgorithm/swexpertacademy 84

[SWEA][Python] 4874 Forth

stack단골문제. 후위표기식. 컴퓨터는 후위표기식으로 수식을 표현한다고 한다. 신기방기. for test in range(1, int(input())+1): equation = input().split() flag = 0 stack = [] try: for el in equation: # 숫자면 stack에 밀어넣기. if el.isdigit(): stack.append(int(el)) # 연산자면 숫자 두개꺼내서 연산. elif el == '+': stack.append(stack.pop() + stack.pop()) elif el == '-': tmp = stack.pop() stack.append(stack.pop() - tmp) elif el == '*': tmp = stack.pop() sta..

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

재귀구조 잘 잡은건가 싶기도하고 뭔가 줄일수 있을 것 같기도 한데.. 일단 번호랑 숫자 묶어서 깊게 갔다가 둘남으면 가위바위보하고 나와서 승자끼리 가위바위보 시켰음. def rock_siccor_paper(fights): length = len(fights) if length==1: return fights[0] elif length==2: if fights[0][1]==1: if fights[1][1]==1 or fights[1][1]==3: return fights[0] elif fights[1][1]==2: return fights[1] elif fights[0][1]==2: if fights[1][1]==1 or fights[1][1]==2: return fights[0] elif fights[1..

[SWEA][Python] 4881 배열 최소 합

평범한 DFS로 col_check해주면서 진행. 여기서 더 발전되면 비숍, 룩, 퀸 배치문제로 넘어간다. def DFS(row,sum_nums): global min_sum if row == N: min_sum = min(min_sum,sum_nums) return if sum_nums > min_sum: return for i in range(N): if not col_check[i]: col_check[i] = True DFS(row+1,sum_nums+matrix[row][i]) col_check[i] = False for test in range(1,int(input())+1): N = int(input()) matrix = [list(map(int,input().split())) for _ in..

[SWEA][Python] 5099 피자 굽기

deque rotate써서 그냥 돌려줬다. 안돌려도 풀수있을것같긴한데 귀찮.. from collections import deque for test in range(1,int(input())+1): N, M = map(int, input().split()) pizzas = list(map(int,input().split())) pizzas_idx = [[pizza,idx+1] for idx, pizza in enumerate(pizzas)] oven = deque() # 오븐의 크기 N for pizza in pizzas_idx: oven.append(pizza) while len(oven) == N: oven.rotate(-1) oven[-1][0] //=2 if not oven[-1][0]: oven..

[SWEA][Python] 5102 노드의 거리

평범한 그래프 탐색. from collections import deque def BFS(start,goal): queue = deque() queue.append([start,0]) visited = {i: False for i in range(1,V+1)} visited[start] = True while queue: cur_node, cur_dist = queue.popleft() if cur_node==goal: return cur_dist for next_node in graph[cur_node]: if not visited[next_node]: visited[next_node] = True queue.append([next_node,cur_dist+1]) return 0 for test in ..

[SWEA][Python] 2005 파스칼의 삼각형

stack란에 있어서 억지로 stack처럼 LIFO구현. 조금 더 만지면 복사안하고 stack2개로 돌릴 수 있을 것같은데 그냥 구상만.. import sys sys.stdin = open('input.txt') test = int(input()) for test in range(1, test+1): n = int(input()) pascals = [[] for _ in range(n)] #* *삼각형을 그릴 틀* pascals[0].append(1) #* *첫열은 그냥 삽입* for i in range(1, n): #* *2열부터 그릴 것임.* stack = pascals[i-1][:] #* *1열(i-1열을 복사)* pascals[i].append(1) #* *첫인자 삽입* for j in range..

[SWEA][Python] 1234 비밀번호

stack을 이용 간단풀이. import sys sys.stdin = open('input.txt') for test in range(1,11): s, nums = input().split() nums = list(nums) # 비밀번호 list stack = [] # 옮겨담을 stack while nums: stack.append(nums.pop()) # 일단 pop while nums and stack and stack[-1] == nums[-1]: # 같은 문자가 나오면 양쪽 다 제거. 틀린게 나올때까지 혹은 빌때까지 stack.pop() nums.pop() print(f"#{test} {''.join(stack)[::-1]}") # stack 에 역순으로 담긴 password 뒤집어 출력