2019 KCPC acronym

2019 KCPC KCPC는 무엇의 약자일까? (신입생 부문 C번) 코드 제출 url

문자열 A를 B로 압축할 수 있는지 여부를 판단하는 함수를 만들면 쉽습니다.

이 함수는 시간복잡도 O(len(A)+len(B))로 해결할 수 있습니다.

예를 들어보겠습니다. KACAPACA를 KCPCP로 압축할 수 있는지 어떻게 찾을 수 있을까요?

KACAPACA에서 가장 왼쪽에 있는 K를 찾습니다.

ACAPACA에서 가장 왼쪽에 있는 C를 찾습니다.

APACA에서 가장 왼쪽에 있는 P를 찾습니다.

A에서 가장 왼쪽에 있는 P를 찾습니다.

이제 보이시나요? 처음부터 다시 찾을 필요가 없습니다. 찾았던 다음 위치에서 검색을 이어나가면 되기 때문에 O(len(A)+len(B))를 만족합니다.

def kcpc(aft, bef):
    a_idx=0; b_idx=0
    al=len(aft); bl=len(bef)
    while a_idx<al:
        while b_idx<bl and aft[a_idx]!=bef[b_idx]:
            b_idx=b_idx+1
        if b_idx>=bl:
            return False
        a_idx=a_idx+1
        b_idx=b_idx+1
    return True

if __name__=='__main__':
    aft=input()
    bef=input()
    if kcpc("KCPC",bef) and kcpc(aft,bef):
        print("KCPC!")
    else:
        print("KCPC?")