[HackerRank] The Love-Letter Mystery

아르당·2024년 4월 9일
0

HackerRank

목록 보기
72/109
post-thumbnail

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

Problem

제임스는 그의 친구 해리가 그의 여자친구에게 쓴 러브레터를 발견했다. 제임스는 장난꾸러기라서 편지에 간섭하기로 결심한다.그는 편지의 모든 단어를 팰린드롬으로 변경한다.
이것을 위해, 그는 두 가지 규칙을 따른다.

  1. 그는 문자의 값을 1만큼만 감소시킬 수 있다. 즉, d를 c로 변경할 수 있지만, c를 d로 변경하거나 d를 b로 변경할 수는 없다.
  2. 문자 a의 값은 더 이상 감소시킬 수 없다.

어떤 문자의 값을 감소시키는 각각의 감소는 단일 작업으로 계산된다. 주어진 문자열을 팰린드롬으로 변환하는데 필요한 최소 작업 수를 찾아라.

Example

s = cde

다음 두 작업 cde -> cdd -> cdc 이 수행된다. 2를 반환한다.

Function Description

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

  • string s: 문자 텍스트

Return

  • int: 작업의 최소 수행 수

Constraints

  • 1 <= q <= 10
  • 1 <= |s| <= 10^4
  • 모든 문자열은 아스키코드[a-z] 영어 소문자로 구성되어 있고, 공백은 없다.

Solved

two pointer로 문제를 해결했다.
먼저 왼쪽 인덱스 left와 오른쪽 인덱스 rigth를 선언하고 left에는 0, right는 문자열 s의 길이 -1을 할당한다. 그리고 결과값 result를 선언하고 0을 할당한다.

int left = 0;
int right = s.length() - 1;
int result = 0;

while문을 통해 left가 right보다 작을 때까지 반복한다. 이때 문자열의 길이가 홀수면 중간 값은 계산할 필요가 없기 때문에 작을 때까지만 반복했다.

while(left < right){

}

이제 반복문 안에서 result와 left, right의 값을 계산한다.
result는 각 left, right 인덱스에 해당하는 문자열의 아스키코드 값을 빼고, 이 값의 절대값을 result에 더한다.
다음 문자들의 계산을 위해 left는 증가시키고 right는 감소시킨다.

while(left < right){
	result += Math.abs(s.charAt(left) - s.charAt(right));

	left++;
	right--;
}

마지막으로 result를 반환한다.

return result;

All Code

public static int theLoveLetterMystery(String s) {

	int left = 0;
	int right = s.length() - 1;
	int result = 0;

	while(left < right){
		result += Math.abs(s.charAt(left) - s.charAt(right));

		left++;
		right--;
	}

	return result;
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글