Algorithm

[Algorithm] BAEKJOON 12789번. 도키도키 간식드리미 (Python)

콩다영 2024. 1. 18.
728x90

 

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

  • 문제명 : 도키도키 간식드리미
  • 사용 언어 : Python3
  • 자료구조, STACK(스택)

문제 설명

 
 

입력

입력의 첫째 줄에는 현재 승환이의 앞에 서 있는 학생들의 수 N(1 ≤ N ≤ 1,000,자연수)이 주어진다.
다음 줄에는 승환이 앞에 서있는 모든 학생들의 번호표(1,2,...,N) 순서가 앞에서부터 뒤 순서로 주어진다.
 

출력

승환이가 무사히 간식을 받을 수 있으면 "Nice"(따옴표는 제외)를 출력하고 그렇지 않으면 "Sad"를 출력한다.
 
 
 
 

▼ 실행코드▼

from collections import deque

N = int(input())
stu_queue = deque(map(int, input().split()))
stack = deque()
i = 1

while stu_queue:
  if stu_queue and stu_queue[0] == i:
    # 일치하면 큐 맨 앞의 학생을 제거하고 i+1
    stu_queue.popleft()
    i += 1
  else:
    # 일치하지 않으면 현재 학생 큐에서 제거, 스택에 푸시
    stack.append(stu_queue.popleft())

  # 스택에 있는 학생 중 예상된 순서 i와 일치하는지 확인
  while stack and stack[-1] == i:
    # 일치하면 스택에서 해당 학생 제거, i+1
    stack.pop()
    i += 1

# 스택이 비어 있는지 확인하여
# 모든 학생이 올바른 순서에 있음을 나타낸다.
print("Nice" if not stack else "Sad")

 


 

학습 회고

복잡한.. 내 머리속 , 메모장

: 처음에 너무 복잡하게 접근해서 쉽게 풀리지 않았다.

스택 2개를 사용해서 코드를 구현하다가 마지막에 두번째 스택에서 스택에 남은 학생 번호표를 확인하는 로직에서 꼬이면서 테스트 케이스에 따라 다른 결과가 나왔다.. 
테스트 케이스에 따라 다른 결과가 나와서 정답률이 높지 않았고 이를 다시 다른방향으로 접근하여 수정하여 풀이했다.

한 번에 바로 생각해내지 못한 점이 아쉽지만,, 계속 문제를 풀다보면 빨리 친숙해지겠지... D_D ////

 


 

728x90
반응형

댓글