728x90
반응형
1. 문제 설명
2. 풀이과정
해당 문제는 승환이가 간식을 받을 수 있는지 없는지 판별하는 문제이다.
승환이가 간식을 받으려면 승환이 앞에 서 있는 학생들이 모두 간식을 받아야 한다.
대기열은 한 사람씩 들어갈 수 있고 마지막으로 들어온 순서대로 나갈 수 있으므로 스택 구조를 활용한다.
대기열의 제일 뒤에 서 있는 학생이 현재 순서인지 먼저 판별하고 그게 아니면 현재 줄 서 있는 학생을 차례대로 판별하며 간식을 주거나 대기열로 보낸다.
서 있는 학생을 다 판별했다면 대기열에 남아있는 학생을 순서대로 판별하여 모든 학생이 간식을 받았는지 확인한다.
- sys.stdin.readline() 함수를 사용하기 위해 sys 모듈을 불러온다. import sys
- 앞에 서 있는 학생의 수를 입력받는다. N = int(sys.stdin.readline())
- 학생들의 번호를 입력받아 리스트로 저장한다. wait = list(map(int, sys.stdin.readline().split())
- 대기열에 서 있는 학생을 저장할 스택을 생성한다. stack = list()
- 현재 번호의 순서를 저장할 변수를 생성하고 1을 저장한다. num = 1
- 앞에 서 있는 학생이 다 빠질 때까지 반복하며 while (wait)
- 만약 대기열에 학생이 있을 때, 대기열의 제일 뒤에 서 있는 학생이 해당 순서이면 if (len(stack) > 0) and (stack[-1] == num)
- 해당 학생에게 간식을 주고 stack.pop()
- 다음 순서로 넘어간다. num += 1
- 그게 아닐 때 else
- 만약 현재 학생이 해당 순서이면 다음 순서로 넘어간다. if (wait[0] == num): num += 1
- 그게 아니면 학생을 대기열로 보낸다. else: stack.append(wait[0])
- 해당 학생을 줄에서 제거한다. del wait[0]
- 대기열에 있는 학생이 다 빠질 때까지 반복하며 while (stack)
- 만약 대기열에 제일 뒤에 있는 학생이 번호의 순서이면 if (stack[-1] == num)
- 해당 학생에게 간식을 주고 stack.pop()
- 다음 순서로 넘어간다. num += 1
- 그게 아니라면 더 이상 간식을 받을 수 있는 학생이 없으므로 종료한다. else: break
- 만약 앞에 서 있던 학생 모두가 간식을 받았다면 if (len(stack) == 0)
- 승환이도 간식을 받을 수 있으므로 Nice를 출력한다. print('Nice')
- 반면에 앞에 서 있던 학생 중 간식을 못 받은 학생이 있다면 else
- 승환이도 간식을 받을 수 없으므로 Sad를 출력한다. print('Sad')
반응형
3. 소스코드
import sys
N = int(sys.stdin.readline())
wait = list(map(int, sys.stdin.readline().split()))
stack = list()
num = 1
while (wait):
if (len(stack) > 0) and (stack[-1] == num):
stack.pop()
num += 1
else:
if (wait[0] == num):
num += 1
else:
stack.append(wait[0])
del wait[0]
while (stack):
if (stack[-1] == num):
stack.pop()
num += 1
else:
break
if (len(stack) == 0):
print('Nice')
else:
print('Sad')
728x90
반응형
'백준' 카테고리의 다른 글
[백준] 24511번 : queuestack - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.12.07 |
---|---|
[백준] 2346번 : 풍선 터뜨리기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.12.06 |
[백준] 28279번 : 덱 2 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.12.05 |
[백준] 18258번 : 큐 2 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.12.04 |
[백준] 4949번 : 균형잡힌 세상 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.12.02 |
[백준] 28278번 : 스택 2 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.12.01 |
[백준] 13909번 : 창문 닫기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.11.30 |
[백준] 17103번 : 골드바흐 파티션 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.11.29 |