문제 제목 : 팰린드롬인지 확인하기
문제
알파벳 소문자로만 이루어진 단어가 주어진다.
이 때, 이 단어가 팰린드롬인지 아닌지 확인하는 프로그램을 작성하시오.
팰린드롬 (Palindrome) 이란, 앞으로 읽을 때와 거꾸로 읽을 때 똑같은 단어를 말한다.
level
, noon
은 팰린드롬이고,
baekjoon
, online
, judge
는 팰린드롬이 아니다.
입력
첫째 줄에 단어가 주어진다.
단어의 길이는 1보다 크거나 같고, 100보다 작거나 같으며, 알파벳 소문자로만 이루어져 있다.
출력
첫째 줄 에 팰린드롬이면 1, 아니면 0을 출력한다.
예제 입력 1
level
예제 출력 1
1
예제 입력 2
baekjoon
예제 출력 2
0
왼쪽부터 읽었을 때, 오른쪽 부터 읽었을 때, 동일하다는 것을 어떻게 표현할 수 있을까?
직관적으로 해석 했을 때, 두 가지의 해석이 나온다.
- 해당 문자열 원본, 거꾸로 두 개의 배열이 존재할 때, 두 개의 배열은 동일하다.
- 문자열 시작 인덱스, 마지막 인덱스, 두 개를 선정했을 때,
- 시작 인덱스는 커지며, 마지막 인덱스는 작아진다.
- 각각의 인덱스의 데이터는 항상 동일하다.
이렇게 해석 할 수 있다.
물론 1, 2 번 둘 다 프로그램으로 구현이 쉽게 가능하다.
하지만, 1번의 경우 비교 문자열 배열을 하나 더 만들어야 한다는 점에서 효율적이지 않다.
따라서, 2번 의 방식으로 팰린드롬 인지 체크하게 된다.
만약에, 문자열 str
을 받았다고 가정한다.
그렇다면, 시작 인덱스와 마지막 인덱스의 정의는 어떻게 하는가?
바로, 0
과 str.length() - 1
이다.
시작 인덱스인 0
은 점점 커지며,
마지막 인덱스인 str.length() - 1
은 점점 작아진다.
중앙에서 만나거나, 엇갈릴 때 까지 이러한 반복을 실시한다.
서로의 인덱스가 지나쳐 봤자 결과는 동일한 것이 팰린드롬이기 때문이다. - 양쪽 동일 특성
이를 for
문법으로 만드는 방식이 있으며, while
문법으로 만드는 방식이 존재한다.
Answer 1 - for 문법 사용
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
boolean isPalindrome = true;
for(int i = 0, j = str.length() - 1; i <= j; i++, j--) {
char ch1 = str.charAt(i);
char ch2 = str.charAt(j);
if(ch1 != ch2) {
isPalindrome = false;
break;
}
}
if(isPalindrome)
System.out.println(1);
else
System.out.println(0);
}
}
Answer 2 - while 문법 사용
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
int i = 0;
int j = str.length() - 1;
boolean isPalindrome = true;
while(i <= j) {
char ch1 = str.charAt(i);
char ch2 = str.charAt(j);
if(ch1 != ch2) {
isPalindrome = false;
break;
}
i++; j--;
}
if(isPalindrome)
System.out.println(1);
else
System.out.println(0);
}
}
'백준-단계별로 풀어보기 > 6-심화 1' 카테고리의 다른 글
백준 2941 Java - 크로아티아 알파벳 (0) | 2024.10.25 |
---|---|
백준 2444 Java - 별 찍기 - 7 (1) | 2024.09.18 |
백준 3003 Java - 킹, 퀸, 룩, 비숍, 나이트, 폰 (0) | 2024.09.17 |