[백준 14698, 1991 ] - Python

골솔·2021년 3월 4일
0

알고문제풀기

목록 보기
12/27

취알스 10주차 우선순위 큐, 힙, 트리 요약 - 2/4

14698 전생했더니 슬라임 연구자였던 건에 대하여 (Hard)

  • 우선순위 큐, 그리디 알고리즘 이용
  • 문제가 복잡해보이지만 greedy하게 풀면 아주 쉽게 풀 수 있음.
import heapq
import sys
input = sys.stdin.readline
t = int(input())
while(t>0):
    que = []
    n = int(input())
    temp = list(map(int, input().split()))
    for i in range(n):
        heapq.heappush(que, temp[i])
    answer = 1
    while len(que)>1:
        no1 = heapq.heappop(que)
        no2 = heapq.heappop(que)
        answer  = answer * no1 * no2
        heapq.heappush(que, no1 * no2)
    print(answer%1000000007)
    t-=1

1991 트리 순회

class Node:
    def __init__(self, data, left_node, right_node):
        self.data = data
        self.left_node = left_node
        self.right_node = right_node
# 전위 순회
def pre_order(node):
    print(node.data, end='')
    if node.left_node != None:
        pre_order(tree[node.left_node])
    if node.right_node != None:
        pre_order(tree[node.right_node])
#중위 순회
def in_order(node):
    if node.left_node != None:
        in_order(tree[node.left_node])
    print(node.data, end='')
    if node.right_node != None:
        in_order(tree[node.right_node])
#후위 순회
def post_order(node):
    if node.left_node != None:
        post_order(tree[node.left_node])
    if node.right_node != None:
        post_order(tree[node.right_node])
    print(node.data, end='')

n = int(input())
tree = {}

for i in range(n):
    data, left_node, right_node= input().split()
    if left_node ==".":
        left_node = None
    if right_node == ".":
        right_node = None
    tree[data] = Node(data, left_node, right_node)

pre_order(tree['A'])
print()
in_order(tree['A'])
print()
post_order(tree['A'])
profile
골때리는이솔

3개의 댓글

comment-user-thumbnail
2021년 3월 9일

최근 글이라 댓글 남깁니다.
1991 문제에서 불필요하게 순회를 3번 도는 것 같습니다! 한번만 돌아도 모든 결과를 지나칩니다.
링크 참고하시면 좋을것 같아요ㅎㅎ

1개의 답글