취준/코딩테스트
백준 12789 (python): 도키도키 간식 드리미
린구
2024. 6. 21. 19:35
반응형
n = int(input())
stack = list(map(int, input().split()))
stack.reverse()
space = []
order = 1
while stack or space:
# 처음 줄 선 곳에 사람이 있고 본인 차례라면
if stack and stack[-1] == order:
stack.pop()
order += 1
# 대기 공간에 사람이 있고 본인 차례라면
elif space and space[-1] == order:
space.pop()
order += 1
# 두 경우 모두 아니라면
else:
# 처음 줄 선 곳에서 대기 공간으로 이동
if stack:
space.append(stack.pop())
# 두 경우 모두 아닌데 처음 줄 선 곳에도 사람이 없다면 줄을 잘못 선 것!!!
else:
break
if stack or space:
print("Sad")
else:
print("Nice")
우와 이 문제도 다시 풀어본 문제인데
이전에 푼 방법보다 훨씬 가독성 있게 푼 것 같다.
stack = [1, 2, 3]
# 모두 시간복잡도 O(1)
stack.pop()
stack.append(4)
stack[-1]
n = int(input())
mem = list(map(int, input().split()))
stack = []
count = 1
flag = True
for i in mem:
if count != i:
if stack: # 스택에 번호가 이미 있을 때
while stack:
if stack[-1] < i:
if stack[-1] != count:
flag = False
break
else:
stack.pop()
count += 1
else:
break
# 스택에 아무것도 없거나 순서에 맞는 번호라면 넣기
stack.append(i)
else:
count += 1
if flag == True:
print("Nice")
else:
print("Sad")
이전에 푼 방법.......
너무 구리당 ㅎㅎ
나밖에 못 알아볼 듯
반응형