반응형
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")
이전에 푼 방법.......
너무 구리당 ㅎㅎ
나밖에 못 알아볼 듯
반응형
'취준 > 코딩테스트' 카테고리의 다른 글
백준 2164 (python): 카드2 (0) | 2024.06.24 |
---|---|
백준 18258 (python): 큐2 (0) | 2024.06.22 |
백준 4949 (python): 균형잡힌 세상 (0) | 2024.06.19 |
백준 9012 (python): 괄호 (0) | 2024.06.19 |
백준 10773 (python): 제로 (1) | 2024.06.18 |