[김태원 알고리즘] 교육과정 설계 (큐)
사용 언어: Python3
문제
풀이
내 풀이
from collections import deque
def process(i):
subject = input()
q = deque() # 현수의 플랜 중 필수과목만 담을 큐
for x in subject:
if x in must and not x in q: # ✅ 이미 q에 들어있다면 제외!
q.append(x)
if ''.join(q) == must: # must와 현수가 짠 플랜 비교
print('#{} {}'.format(i, 'YES'))
else:
print('#{} {}'.format(i, 'NO'))
must = input()
N = int(input())
for i in range(N):
process(i+1);
- 현수의 플랜을 순회하며 필수 과목들만 큐에 담는다.
- 🌟 필수과목이 두 개 이상 포함되어 있다면, 맨 처음 나오는 값 “하나”만 넣는다.
- 처음에 주어진 필수과목 순서와 큐가 일치하면
YES
, 그렇지 않으면NO
다른 풀이
from collections import deque
def process(i):
q = deque(must) # 처음에 주어진 필수과목을 큐 형태로
lst = list(input())
for x in lst:
if x in q: # 똑같은 문자 두 번 이상 있을 때 q에서 이미 pop
if x != q.popleft():
print('#{} {}'.format(i, 'NO'))
return
if len(q) == 0:
print('#{} {}'.format(i, 'YES'))
return
print('#{} {}'.format(i, 'NO'))
return
must = input()
N = int(input())
for i in range(N):
process(i+1);
- 처음에 주어진 필수과목 순서를 큐에 넣는다.
- 현수의 플랜을 순회하면서 해당 과목이 큐 안에 있다면
popleft()
- 만약 현수의 플랜 중 같은 필수과목이 두 개 이상 있다면, 처음 나올 때 그 값은 큐에서 사라진다.
- 두 번째 값부터는 필수과목이 아닌게 되어 고려대상이 되지 않는다.
- 순회하면서 큐에서 꺼낸 값과 현수의 플랜에서 꺼낸 필수과목이 같지 않으면
NO
- 순회를 마치고도 큐 안에 값이 남아있으면 그 필수과목은 수강하지 않은 것이기 때문에
NO
- 무사히 순회를 마치고 큐의 길이가 0이라면
YES
다른 풀이
로직은 바로 위와 같다.
from collections import deque
def process(i):
q = deque(must) # 처음에 주어진 필수과목을 큐 형태로
lst = list(input())
for x in lst:
if x in q: # 똑같은 문자 두 번 이상 있을 때 q에서 이미 pop
if x != q.popleft():
print('#%d NO' %i) # ✅ 필수과목 순서가 다른 경우
break
else: # ✅ for~else
if len(q) == 0:
print('#%d YES' %i)
else:
print('#%d NO' %i) # ✅ 필수과목이 남은 경우
must = input()
N = int(input())
for i in range(N):
process(i+1);
💛 개인 공부 기록용 블로그입니다. 👻