교육과정 설계(큐)

현수는 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
복사했습니다!