[HackerRank] Append and Delete

아르당·2023년 11월 15일
0

HackerRank

목록 보기
20/109
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

문제

소문자로 된 영어 단어 두개가 있다. 첫 번째 단어에 두 가지 작업을 수행할 수 있다.

  1. 소문자로 된 영어 단어 끝에 문자열을 붙인다.
  2. 마지막 문자를 삭제한다. 빈 문자열일 경우 결과는 빈 문자열이다.

정수 k와 두 개의 문자열 s와 t가 주어지고, s에 위 작업을 정확히 k만큼 수행했을 때 s가 t로 변하는지 결정해라. 만약 가능하다면 Yes를 출력한다. 그렇지 않다면 No를 출력한다.

Example

s = abc
t = def
k = 6

s를 t로 변환하려면, 먼저 3번 움직여서 모든 문자열을 삭제한다. 다음 t를 순서대로 추가한다. 6번째에 문자열이 일치한다. Yes를 반환한다.
만약 수행 가능 횟수가 더 많다면, 빈 문자열에 삭제 작업을 해서 수행 가능 횟수를 줄일 수 있다. 만약 수행 가능 횟수가 6보다 작다면, 새로운 문자열을 만들 수 없다.

Function Description

appendAndDelete 함수를 완성해라.
appendAndDelete 함수는 아래와 같은 매개변수를 가지고 있다.

  • String s: 초기 문자열
  • String t: 바꾸는 문자열
  • int k: 수행 가능 횟수

Return

  • String: Yes 또는 No

Constraints

  • 1 <= |s| <= 100
  • 1 <= |t| <= 100
  • 1 <= k <= 100
  • s 와 t는 ascii[a-z]인 영문 소문자

전체 코드

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";
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글