Python/백준

[백준] 12789 도키도키 간식드리미 Python

황진수 2024. 6. 24. 01:45

https://www.acmicpc.net/problem/12789

 

📝  문제

사람들은 현재 1열로 줄을 서있고, 맨 앞의 사람만 이동이 가능하다. 인규는 번호표 순서대로만 통과할 수 있는 라인을 만들어 두었다. 이 라인과 대기열의 맨 앞 사람 사이에는 한 사람씩 1열이 들어갈 수 있는 공간이 있다. 현재 대기열의 사람들은 이 공간으로 올 수 있지만 반대는 불가능하다. 승환이를 도와 프로그램을 완성하라.
현재 간식 배부 공간을 그림으로 나타내면 다음과 같다.
위 예제는 다음 그림과 같이 움직였을 때 모두가 순서대로 간식을 받을 수 있다.

 

🔎  풀이

수를 입력받은 다음, 변수 nums에 리스트 형태로 저장한다. 이후 nums를 인덱스 차례대로 현재 순서의 번호와 일치하는지 비교한다.

만약 일치하지 않을 경우, others의 가장 마지막 인덱스의 값이 현재 순서 번호와 일치하는지 비교한다.

others와의 비교 또한 일치하지 않을 경우, 비교한 nums의 값을 others에 추가한 뒤 nums에서는 삭제한다.

반복문이 종료되면 others에 값이 존재하지 않거나 others의 값 순서가 내림차순으로 정렬했을 때와 동일하면 "Nice"를 출력한다. 그 외의 경우에는 "Sad"를 출력한다.

 

💻  코드

n = int(input())
nums = list(map(int, input().split()))
others = []

i = 0
for _ in range(n):
    if nums[0] == i + 1:
        nums.remove(nums[0])
        i += 1
    elif others and others[-1] == i + 1:
        others.pop()
        i += 1
    else:
        others.append(nums[0])
        nums.remove(nums[0])

if (not others) or (others == sorted(others, reverse=True)):
    print("Nice")
else:
    print("Sad")