백준 10988 [자바 java]
팰린드롬인지 확인하기
1 초 | 256 MB | 81779 | 49768 | 42481 | 61.155% |
문제
알파벳 소문자로만 이루어진 단어가 주어진다. 이때, 이 단어가 팰린드롬인지 아닌지 확인하는 프로그램을 작성하시오.
팰린드롬이란 앞으로 읽을 때와 거꾸로 읽을 때 똑같은 단어를 말한다.
level, noon은 팰린드롬이고, baekjoon, online, judge는 팰린드롬이 아니다.
입력
첫째 줄에 단어가 주어진다. 단어의 길이는 1보다 크거나 같고, 100보다 작거나 같으며, 알파벳 소문자로만 이루어져 있다.
출력
첫째 줄에 팰린드롬이면 1, 아니면 0을 출력한다.
예제 입력 1 복사
level
예제 출력 1 복사
1
예제 입력 2 복사
baekjoon
예제 출력 2 복사
0
import java.util.*;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
int L = str.length();
int result = 1;
for (int i = 0; i < L/2; i++) {
if (str.charAt(i) != str.charAt(L - i -1)) {
result = 0;
break;
}
}
System.out.println(result);
}
}
수정하면서 result의 초깃값을 1로 바꿔줬어야 했는데 수정 안해서 좀 많이 틀림
핵심은 문자열 반으로 갈라서 앞 뒤 비교하기 같은데 L-i-1 생각하기가 너무 어렵당..
L-i 에서 1을 더 빼주는 이유는 for(int i = 0; i < L/2; i++)라 i 가 0부터 시작하기 때문
L이 5 일때
i는 순서대로 0 1 2
L-i-1은 4 3 2
2랑 2를 비교하게 되기 때문에
다른게 나왔을때 result값이 0으로 되는 if 문을 써줬어야했음
아니 처음에는
이렇게 풀었는데 계속 틀리다고 떠서 좀 헤맸음
근데 생각해보니까 저렇게 하면
adfsfda 이런식으로 하나만 같아도 출력값이 1이 나오기 때문에 틀린코드임
앞에서 말한 것 처럼
문자를 비교하다 하나라도 같은게 나왔을 때 1이 출력되는 코드가 아니라
문자를 비교하다 하나라도 "다른게" 나왔을 때 0이 출력되는 코드를 짰어야 했음... 컹스
아 글고 객체지향 문법이 아직 많이 헷갈려서 그 부분 위주로 공부해야할듯