[Algorithm] 교육과정설계(큐) (Feat. 입력 문자열에서 개행 제거하기)

myeonji·2022년 2월 12일
0

Algorithm

목록 보기
39/89

현수는 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“를 출력하는 프로그램을 작성하세요.

💡 > 입력받은 문자열에서 개행 제거하기

import sys
input = sys.stdin.readline

str1 = input()  # 뒤에 개행('\n')이 붙는다.
str2 = sys.stdin.readline().rstrip()  # 개행 붙지 않음

<내 답안>

must = sys.stdin.readline().rstrip()  # 필수과목
n = int(input())  # n개의 수업설계
for n in range(n):
    sch = sys.stdin.readline().rstrip()
    queue = deque(must)
    for j in sch:
        if j in queue:
            q = queue.popleft()
            if q == j:  # 순서 맞음
                continue
            else:  # 순서에 어긋남
                print('#{} NO'.format(n+1))
                break
    else:
        if len(queue) == 0:
            print('#{} YES'.format(n+1))

음.. 채점이 90%만 맞았다고 한다.

<수정 후 정답>

must = sys.stdin.readline().rstrip()  # 필수과목
n = int(input())  # n개의 수업설계
for n in range(n):
    sch = sys.stdin.readline().rstrip()
    queue = deque(must)
    for j in sch:
        if j in queue:
            q = queue.popleft()
            if q == j:  # 순서 맞음
                continue
            else:  # 순서에 어긋남
                print('#{} NO'.format(n+1))
                break
    else:
        if len(queue) == 0:
            print('#{} YES'.format(n+1))
        else:
            print('#{} NO'.format(n + 1))

알고보니 마지막 queue가 비어있는지 확인하는 부분에서 else 문을 쓰지 않아 틀렸다고 한 것이었다.
queue가 비어있다면 필수과목을 모두 수업계획서에 넣어 시간표를 짠 것이지만, 그렇지 않다면(else) NO를 출력해야 했다.
만약 순서는 맞았지만 queue가 비어있지 않을 때 NO가 출력되어야 하기 때문에 else문을 써줘야 한다!

0개의 댓글