import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.next();
char[] ary = s.toCharArray();
int mid; // 문자에서 가운데 값 조사
if (ary.length % 2 == 0) { // 글자의 긹이가 짝수인 경우
mid = ary.length / 2 - 1;
for (int i = 0; i <= mid; i++) { // start -> mid <-last의 모양으로 start,last의 값을 비교
// 하나라도 값이 다르면 NO출력, for문에서 문제가 없으면 YES출력
if (ary[i] != ary[ary.length - 1 - i]) {
System.out.println("NO");
return;
}
}
} else { // 글자의 길이가 홀수인 경우
mid = ary.length / 2;
for (int i = 0; i <= mid; i++) {
if (ary[i] != ary[ary.length - 1 - i]) {
System.out.println("NO");
return;
}
}
}
System.out.println("YES");
}
}
문제는 입력받은 문자열을 앞으로 읽을떄와 뒤에서 읽을때의 값이 같은지 비교하는 문제이다.
아이디어는 먼저 문자열의 길이가 홀수/짝수인 경우를 나누어서 mid값을 구한다. mid값은 for문을 몇번 반복하는지 결정한다. 여기서 for문은 문자열에서 mid값(가운데 값)만큼 반복하면서 문자열의 첫번째, 마지막 위치에서 하나씩 mid방향으로 이동하면서 값을 비교한다.
예를들어 문자열이 "abcba"인 경우 문자열의 길이는 홀수이므로 mid값은 2("c")가 된다. 문자열 첫번째"a"와 마지막 "a"위치 에서 첫번째는 ++, 마지막은 --를 하면서 총 mid의 크기만큼 반복한다. 가운데 값까지 반복을 하는 것이다. 반복을 하다가 두 값이 다르게 되면 "NO"를 출력하고 그렇지 않으면 "YES"를 출력한다.
'알고리즘 문제' 카테고리의 다른 글
[알고리즘 문제] Mountain (0) | 2019.04.16 |
---|---|
[알고리즘 문제] 문자열 압축 (0) | 2019.04.15 |
[알고리즘 문제] Streetree (0) | 2019.04.11 |
[알고리즘 문제] pfactorization (0) | 2019.04.09 |
[알고리즘 문제] Fraction Sum (0) | 2019.04.08 |