취준/코딩테스트

백준 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")

 

이전에 푼 방법.......

너무 구리당 ㅎㅎ

나밖에 못 알아볼 듯

 

 

반응형