[HackerRank][Python3] Maximum Element
2018. 9. 2. 18:57 |
프로그래밍/HackerRank
Problem :
https://www.hackerrank.com/challenges/maximum-element/problem
My Solution :
#!/usr/bin/env python3 class Stack(object): def __init__(self, data=1): self.data = data self.prev = None self.next = None self.maximum = data tail = Stack() N = int(input()) for _ in range(N): line = input() if 1 < len(line): t, x = map(int, line.split()) node = Stack(x) node.prev = tail tail.next = node node.maximum = max(node.maximum, tail.maximum) tail = node else: if not tail.prev: raise Exception('Stack is empty!') elif line == '2': tail = tail.prev tail.next = None else: print(tail.maximum)
Comment :
Stack 구조이기 때문에 LIFO (후입선출) 이다. 따라서 아래쪽에 있는 node는 최대값을 구함에 있어 자기보다 위쪽에 있는 node의 값을 알 필요가 없다. 아래쪽에 있는 node는 바닥부터 자기까지의 최대값만 기억하고 있으면 된다. 새로 삽입되는 node는 바로 직전 node에 기록되어 있는 최대값과 자신의 data만 비교하면 된다.
My Solution2 :
이번에는 원래 Stack과 최대값 추적용 Stack을 활용한 버전이다.
#!/usr/bin/env python3 stack = [] max_stack = [] N = int(input()) for _ in range(N): line = input() if 1 < len(line): t, x = map(int, line.split()) stack.append(x) if not max_stack: max_stack.append(x) else: max_stack.append(max(x, max_stack[-1])) elif line == '2': stack.pop() max_stack.pop() else: print(max_stack[-1])
'프로그래밍 > HackerRank' 카테고리의 다른 글
[HackerRank][Python3] Truck Tour (0) | 2018.09.03 |
---|---|
[HackerRank][Python3] Waiter (0) | 2018.09.03 |
[HackerRank][Python3] Simple Text Editor (0) | 2018.09.02 |
[HackerRank][Python3] Equal Stacks (0) | 2018.09.02 |
[HackerRank][Python3] Matrix Layer Rotation (2) | 2018.08.08 |
[HackerRank][Python3] Dijkstra: Shortest Reach 2 (0) | 2018.08.07 |
[HackerRank][Python3] Tries: Contacts (0) | 2018.08.05 |
[HackerRank][Python3] Swap Nodes [Algo] (0) | 2018.07.27 |
최근에 달린 댓글 최근에 달린 댓글