1 분 소요

교육과정설계

문제 정리

입력

CBA
3
CBDAGE
FGCDAB
CTSBDEA

처리 과정

  1. 수강과목 요소를 하나씩 돌면서…
  2. 해당 요소가 필수과목 큐에 포함되어 있는데 필수과목 큐에서 pop한 요소와 다르다면 NO & break
  3. 2번에서 break 당하지 않았으며 필수과목 큐에 남은 요소가 없어야지 YES

출력

#1 YES
#2 NO
#3 YES

내 답

import sys
from collections import deque # deque라는 자료구조를 사용하기 위해 임포트
sys.stdin = open("./input/in7.txt", "rt")

required_Q=list(input()) # 문자열 하나하나를 리스트로 받는 방법
required_Q=deque(required_Q) # 필수과목 큐
n=int(input())

for i in range(n):
    plan_Q=list(input())
    plan_Q=deque(plan_Q) # 수강과목 큐
    while True:
        cur=plan_Q.popleft()
        if any(cur==x for x in required_Q): # Q에서 pop 했을 때 필수과목인 경우만 관심 있음
            if cur!=required_Q.popleft(): # 제일 첫번째 필수과목과 다르면 NO
                 print("#%d NO" %(i+1))
            else: # 제일 첫번째 필수과목이면 YES
                print("#%d YES" %(i+1))
            break

+) 수강과목 큐를 다 돌았을 때 필수과목 큐에 요소가 남아있다면 NO 출력해야함 +) 하나의 수강과목 테스트 케이스 실행 후 매번 필수과목 큐를 채워야함

풀이

import sys
from collections import deque # deque라는 자료구조를 사용하기 위해 임포트
sys.stdin = open("./input/in7.txt", "rt")

required=input() # 필수과목 (스트링으로 받음)
n=int(input())

for i in range(n):
    plan=input() # 수강과목 (스트링으로 받음)
    required_Q=deque(required) # 🌟 매번 테스트케이스마다 수강과목을 읽고 필수과목 큐를 초기화
    
    for x in plan: # 수강과목 하나하나를 접근
        if x in required_Q: # 🌟 x가 필수과목이라면
            if x!=required_Q.popleft():
                print("#%d NO" %(i+1))
                break
    else: # 수강과목을 무사히 돌았다고 무조건 YES는 아님
        if len(required_Q)==0: 
            print("#%d YES" %(i+1))
        else: # 필수과목 큐에 요소 남아있으면 NO
            print("#%d NO" %(i+1))

정리

  • 스트링 변수도 deque로 변경 가능
  • 스트링 변수도 for x in str을 통해 요소 하나하나 접근 가능
  • 필수과목 큐에 요소가 남아있을 경우 등 예외상황 꼼꼼히!
  • if x in required_Q: x가 큐에 포함되어 있는지 확인할 때 in!
  • 출력 형식 지정: ` print(“#%d YES” %(i+1))`


💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기

태그:

카테고리:

업데이트: