[Python] BOJ 27930 / 당신은 운명을 믿나요?

Jerry·2023년 4월 21일
0

알고리즘

목록 보기
22/25

문제
수능 시험을 앞둔 민지는 수능 전날 점집에서 점괘를 받았다. 이 점괘를 통해 민지는 어떤 학교에 합격할지를 해석할 수 있다. 점괘
SS는 알파벳 대문자로 이루어진 문자열이다.

점괘를 해석하는 방법은 다음과 같다. 점괘의 첫 글자부터 차례대로 점괘를 읽는다.
ii번 글자까지 읽었을 때, 현재까지 읽은 점괘에서 순서를 유지한 채로
00개 이상의 글자를 제거하고 YONSEI나 KOREA를 얻을 수 있다면, 민지는 각각 YONSEI와 KOREA에 합격하는 것이다.

민지는 YONSEI 또는 KOREA를 반드시 찾을 수 있음이 보장된다. 또한 YONSEI와 KOREA를 모두 찾을 수 있는 경우, 먼저 찾은 학교에 합격하게 된다.

민지가 어떤 학교에 합격하게 될지를 알아보자. 두 학교를 동시에 합격할 수 없음이 보장된다.

입력
점괘 S가 주어진다.

출력
민지가 합격할 학교를 출력한다.

제한

5S5000005 \leq |S| \leq 500\,000

서브태스크
번호 배점 제한
1 10
점괘에 K가 등장하지 않는다.

2 90
별도의 제약 조건이 없다.

예제 입력 1
KOYONSEREAI

예제 출력 1
KOREA

예제 입력 2
YYOONNSSEEII
예제 출력 2
YONSEI

문제 해결 포인트
1. 입력받은 문자열을 for문 태워서 각 문자가 리스트 KOREA나 리스트 YONSEI의 첫번째 글자와의 일치여부를 확인 후 일치 하면 각 리스트의 첫번째 글자를 remove를 해주고 두 리스트의 길이가 먼저 0이 되면 break해주는 방식으로 코드를 짰음.

처음에 각 문자가 리스트에 들어있으면 remove하는 식으로 코드를 짰다가 틀렸었다. 각 문자가 첫번째 글자와 일치할 때 remove하는게 중요.

코드

s_str = str(input())
s = list(s_str)


k = ['K','O','R','E','A']
y = ['Y','O','N','S','E','I']

for v in s:
    if v == k[0]:
        k.remove(v)
        if len(k) == 0:
            print("KOREA")
            break
    if v == y[0]:
        y.remove(v)
        if len(y) == 0:
            print("YONSEI")
            break
profile
함께 일 하고 싶은 개발자가 되길 희망합니다.

0개의 댓글