[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 |
최근에 달린 댓글 최근에 달린 댓글