문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
소문자로 된 영어 단어 두개가 있다. 첫 번째 단어에 두 가지 작업을 수행할 수 있다.
정수 k와 두 개의 문자열 s와 t가 주어지고, s에 위 작업을 정확히 k만큼 수행했을 때 s가 t로 변하는지 결정해라. 만약 가능하다면 Yes를 출력한다. 그렇지 않다면 No를 출력한다.
s = abc
t = def
k = 6
s를 t로 변환하려면, 먼저 3번 움직여서 모든 문자열을 삭제한다. 다음 t를 순서대로 추가한다. 6번째에 문자열이 일치한다. Yes를 반환한다.
만약 수행 가능 횟수가 더 많다면, 빈 문자열에 삭제 작업을 해서 수행 가능 횟수를 줄일 수 있다. 만약 수행 가능 횟수가 6보다 작다면, 새로운 문자열을 만들 수 없다.
appendAndDelete 함수를 완성해라.
appendAndDelete 함수는 아래와 같은 매개변수를 가지고 있다.
public static String appendAndDelete(String s, String t, int k) {
int commonLength = 0;
for(int i = 0; i < Math.min(s.length(), t.length()); i++) {
if(s.charAt(i) == t.charAt(i)){
commonLength++;
}else{
break;
}
}
int totalMove = s.length() - commonLength + t.length() - commonLength;
if(totalMove <= k && (totalMove - k) % 2 == 0 || totalMove < k && (s.length() + t.length() + 2 * (k - totalMove)) % 2 == 0){
return "Yes";
}else if(s.length() + t.length() <= k){
return "Yes";
}
return "No";
}