본문 바로가기
파이썬 코딩테스트/해커랭크

HackerRank / Append and Delete / Python

by S.T.Lee 2022. 1. 5.

https://www.hackerrank.com/challenges/append-and-delete/problem?isFullScreen=true

 

Append and Delete | HackerRank

Can you convert $s$ to $t$ by performing exactly $k$ operations?

www.hackerrank.com

 

s문자를 t문자로 치환해야한다. 무조건 k번을 제거/추가해야한다.

1. 문자는 뒤에서부터 제거할 수 있다.

2. 문자를 추가할 때는 무조건 뒤에 추가된다.

3. 만약 k번보다 횟수가 남을때는 빈 s문자열에 제거가 가능하며 1회 차감된다.

 

문제 풀이 방법

s와 t의 길이의 합보다 k가 크면 상관없다. 계속 3번 조건을 시행하면 된다.

 

문제는 s와 t의 길이의 합이 k보다 작거나 같을 때이다.

s와 t의 차이의 길이와 k의 차가 홀수일때 k번을 맞출 수 없고 짝수일때는 k번을 맞출 수 있다.

 

예를 들어

s = "y"

t = "yu"

k=2이다.

s를 t로 맞추는 방법은 u를 추가하는 방법 또는 y를 지웠다가 yu를 추가하는 방법이다.

즉, 1번 또는 3번이다.(3보다 크면 전부 가능하다.)

 

s="kkkk"

t="kkkkkk"

k=6이다.

s를 t로 맞추는 방법은 kk를 추가하는 방법과 k,kk,kkk,kkkk를 지웠다 추가하는 방법으로 2,4,6,8,10번이다.(10보다 크면 전부 가능하다.)

 

def appendAndDelete(s, t, k):
    if len(s) + len(t) <= k:
        return "Yes"
    else:
        count = 0
        for i in range(min(len(s), len(t))):
            if s[i] != t[i]:
                break
            else:
                count += 1
        
        num_to_change = len(s) + len(t) - count*2
        
        if num_to_change <= k and num_to_change%2==k%2:
            return "Yes"
        else:
            return "No"