문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
제임스는 그의 친구 해리가 그의 여자친구에게 쓴 러브레터를 발견했다. 제임스는 장난꾸러기라서 편지에 간섭하기로 결심한다.그는 편지의 모든 단어를 팰린드롬으로 변경한다.
이것을 위해, 그는 두 가지 규칙을 따른다.
어떤 문자의 값을 감소시키는 각각의 감소는 단일 작업으로 계산된다. 주어진 문자열을 팰린드롬으로 변환하는데 필요한 최소 작업 수를 찾아라.
s = cde
다음 두 작업 cde -> cdd -> cdc 이 수행된다. 2를 반환한다.
theLoveLetterMystery 함수를 완성해라.
theLoveLetterMystery 함수는 아래와 같은 매개변수를 가지고 있다.
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;
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;
}