반응형
설명
앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열을 회문 문자열이라고 합니다.
문자열이 입력되면 해당 문자열이 회문 문자열이면 "YES", 회문 문자열이 아니면 “NO"를 출력하는 프로그램을 작성하세요.
단 회문을 검사할 때 대소문자를 구분하지 않습니다.
입력
첫 줄에 길이 100을 넘지 않는 공백이 없는 문자열이 주어집니다.
출력
첫 번째 줄에 회문 문자열인지의 결과를 YES 또는 NO로 출력합니다.
예시 입력 1
gooG
예시 출력 1
YES
while문과 leftIndex와 rightIndex를 이용한 방법
while 문으로 leftIndex가 rightIndex 보다 작을 때 까지 반복을 하며 문자를 접근했다.
회문 문자열이 아니면 answer = "NO"를 할당하고, break하고 종료로 풀었다.
package section01.E07_회문문자열;
import java.io.*;
public class Main {
public String solution(String word){
// 입력 : gooG, word.length() >= 100
// 출력 : 회문 문자열이면 "YES" else "NO"
// 1. 대소문자를 구분하지 않기에 입력값인 word를 toLowerCase()
// 2. while문으로 leftIndex가 rightIndex보다 작을때 까지 반복한다.
// 2.1. word의 leftIndex의 값과 rightIndex의 값이 다르면 answer를 "NO"로 변경 후 break
String answer = "YES";
String lowerWord = word.toLowerCase();
int leftIndex = 0, rightIndex = lowerWord.length() - 1;
while (leftIndex < rightIndex){
if (lowerWord.charAt(leftIndex) != lowerWord.charAt(rightIndex)){
answer = "NO";
break;
}
leftIndex++;
rightIndex--;
}
return answer;
}
public static void main(String[] args) throws IOException {
Main T = new Main();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String word = br.readLine();
bw.write(T.solution(word));
bw.flush();
bw.close();
}
}
for문으로 푸는 방법
for문을 word.length() / 2만큼 반복해서 회문문자열을 비교했다.
package section01.E07_회문문자열;
import java.io.*;
public class MainA {
public String solution(String word){
String answer = "YES";
int wordLength = word.length();
word = word.toUpperCase();
for (int i = 0; i < wordLength / 2; i++){
if (word.charAt(i) != word.charAt(wordLength - i - 1)){
answer = "NO";
return answer;
}
}
return answer;
}
}
StringBuilder.reverse()와 equalsIgnoreCase()로 푸는 방법
회문 문자열인지만 검사하는 것이기에 StringBuilder().reverse()로 문자열을 뒤집어서 reverseWord에 할당했다.
문제 조건에 대소문자를 구분하지 않기에, 대소문자 상관없이 비교하기 위해서 equalsIgnoreCase()로 toLowerCase() 또는 toUpperCase()를 사용하지 않고 해결이 가능하다.
package section01.E07_회문문자열;
import java.io.*;
public class MainA {
public String solution(String word){
String answer = "YES";
String reversedWord = new StringBuilder(word).reverse().toString();
if (!word.equalsIgnoreCase(reversedWord)){
answer = "NO";
}
return answer;
}
}
반응형