교육과정 설계(큐)
현수는 1년 과정의 수업계획을 짜야 합니다. 수업중에는 필수과목이 있습니다. 이 필수과목은 반드시 이수해야 하며, 그 순서도 정해져 있습니다.
만약 총 과목이 A, B, C, D, E, F, G가 있고, 여기서 필수과목이 CBA로 주어지면 필수과목은 C, B, A과목이며 이 순서대로 꼭 수업계획을 짜야 합니다.
여기서 순서란 B과목은 C과목을 이수한 후에 들어야 하고, A과목은 C와 B를 이수한 후에 들어야 한다는 것입니다.현수가 C, B, D, A, G, E로 수업계획을 짜면 제대로 된 설계이지만 C, G, E, A, D, B 순서로 짰다면 잘 못 설계된 수업 계획이 됩니다.
수업계획은 그 순서대로 앞에 수업이 이수되면 다음 수업을 시작하다는 것으로 해석합니다. 수업계획서 상의 각 과목은 무조건 이수된다고 가정합니다. 필수과목순서가 주어지면 현수가 짠 N개의 수업설계가 잘된 것이면 “YES", 잘못된 것이면 ”NO“를 출력하는 프로그램을 작성하세요.
▣ 입력설명
첫 줄에 한 줄에 필수과목의 순서가 주어집니다. 모든 과목은 영문 대문자입니다.
두 번째 줄에 N(1<=N<=10)이 주어집니다.
세 번째 줄부터 현수가 짠 N개의 수업설계가 주어집니다.(수업설계의 길이는 30이하이다)
수업설계는 같은 과목을 여러 번 이수하도록 설계해도 됩니다.
▣ 출력설명
수업설계가 잘된 것이면 “YES", 잘못된 것이면 ”NO“를 출력합니다.
▣ 입력예제 1
CBA
3
CBDAGE
FGCDAB
CTSBDEA
▣ 출력예제 1
#1 YES
#2 NO
#3 YES
▣ 입력예제 2
AFC
1
AFFDCCFF
▣ 출력예제 2
#1 YES
풀이
큐 □□□ 에 CBA 넣어놓고
수업설계와 비교하며 있으면 popleft() 한다.
수업설계와 끝까지 비교했을 때, 큐에 필수 수업이 남아있으면 NO, 남아있지 않으면 YES이다.
for ~ else 구문
for문이 break 없이 정상적으로 종료되면 else 구문을 실행한다.
for문이 중간에 break를 당해 종료되면 else 구문을 실행하지 않는다.
deque : 문자열을 넣어도 리스트형태로 전환된 후 큐로 저장된다.
from collections import deque
need = input() # CBA
need = deque(need)
print(need)
CBA
deque(['C', 'B', 'A'])
코드1
from collections import deque
need = input()
n = int(input())
for i in range(n):
plan = input() # 수업 설계
need = deque(need) # 필수수업 큐
for x in plan: # 수업설계의 수업하나하나
if x in need: # 수업설계 하나가 필수수업 안에 있다면
if x!=need.popleft(): # 필수수업의 첫번째와 다르다면
print("#%d NO", %(i+1))
break
else:
if len(need)==0:# 필수 수업을 다 수업설계에 넣었는지
print("#%d YES", %(i+1))
else: # 순서는 통과했지만 필수수업이 남은경우
print("#%d NO", %(i+1))
코드2
from collections import deque
answ = input()
n = int(input())
res = ""
for i in range(n) :
tmp = list(map(str, input()))
dq = deque(tmp)
while dq :
a = dq.popleft()
if a in answ :
res += a
if res == answ :
print("#%d YES" %(i+1))
else :
print("#%d NO" %(i+1))
'⏰ 코딩테스트 > 자료구조 활용' 카테고리의 다른 글
아나그램(딕셔너리 해쉬) (0) | 2021.10.22 |
---|---|
단어 찾기(해쉬) (0) | 2021.10.22 |
응급실(큐) (0) | 2021.10.21 |
공주 구하기(큐) (0) | 2021.10.20 |
후위식 연산(스택) (0) | 2021.10.19 |