문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
이 챌린지에 문자열이 funny 또는 아닌지 판단해야한다. 문자열이 funny인지 판단하는 것은 문자열을 뒤집었을 때 abc -> cba가 되게 만드는 것이다. 각 문자열을 반복하면서 위치 0과 1, 1과 2 그리고 끝까지 문자의 ASCII 값의 절대값의 차이를 비교해라. 만약 절대값 차이의 리스트가 두 개의 문자열이 같다면 그것들은 funny이다.
주어진 문자열이 funny인지 판단해라. 만약 맞다면 Funny를 반환하고, 그렇지 않다면 Not Funny를 반환하라.
s = 'lmnop'
문자의 서수 값은 [108, 109, 110, 111, 112]이다. s를 뒤집으면 'ponml'이고 서수는 [112, 111, 110, 109, 108]dlek. 두 문자열의 인접한 요소들의 절대값 차이는 [1, 1, 1, 1]이라서 답은 Funny이다.
funnyString 함수를 완성해라.
funnyString 함수는 아래와 같은 매개변수를 가지고 있다.
문자열의 양 끝에서 차를 비교하며 반복하면 쉽게 해결할 수 있고, 중간에 차이가 같지 않다면 반복문에서 빨리 빠져나올 수 있다.
먼저 문자열 s를 charArray로 변환하고, 양 끝의 인덱스를 담을 left와 right를 선언하고 각각 0과 s.length() - 1을 할당한다.
char[] charS = s.toCharArray();
int left = 0;
int right = s.length() - 1;
while문을 통해 left가 right보다 작을때만 반복해준다. 양 끝에서 비교하며 가운데로 오기때문에 끝까지 비교할 필요가 없다. 그리고 while문안에서 if문을 통해 left와 left + 1의 차의 절대값과 right와 right - 1의 차의 절대값을 비교한다. 같지 않다면 "Not Funny"를 반환한다. if문에 걸리지 않았다면 left를 증가시키고 right는 감소시킨다.
while(left < right){
if(
Math.abs(charS[left] - charS[left + 1])
!=
Math.abs(charS[right] - charS[right - 1])
){
return "Not Funny";
}
left++;
right--;
}
while문에서 빠져나왔다면 "Funny"를 반환한다.
return "Funny";
public static String funnyString(String s) {
char[] charS = s.toCharArray();
int left = 0;
int right = s.length() - 1;
while(left < right){
if(
Math.abs(charS[left] - charS[left + 1])
!=
Math.abs(charS[right] - charS[right - 1])
){
return "Not Funny";
}
left++;
right--;
}
return "Funny";
}