인프런의 자바(Java)알고리즘 문제풀이 입문:코딩테스트 대비 강좌의 강의를 보고 문제 해설을 작성해보았습니다.
섹션1. String(문자열)의 7. 회문 문자열 강의편 입니다.
설명
앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열을 회문 문자열이라고 합니다.
문자열이 입력되면 해당 문자열이 회문 문자열이면 "YES", 회문 문자열이 아니면 “NO"를 출력하는 프로그램을 작성하세요.
단 회문을 검사할 때 대소문자를 구분하지 않습니다.
입력
첫 줄에 길이 100을 넘지 않는 공백이 없는 문자열이 주어집니다.
출력
첫 번째 줄에 회문 문자열인지의 결과를 YES 또는 NO로 출력합니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class 회문_문자열 {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
solution(str);
}
public static void solution(String str){
str = str.toUpperCase();
char[] s = str.toCharArray();
int lt = 0, rt = str.length()-1;
String result = "";
for(int i=0; i<str.length(); i++){
if(s[lt+i] == s[rt-i]) {
result = "YES";
}else {
result = "NO";
}
}
System.out.println(result);
}
}
>>해설
버퍼를 통해 문자열을 입력 받아서 solution() 메소드의 매개변수로 전달합니다.
회문을 검사할 때 대소문자는 구분하지 않는다고 하였으므로 toUpperCase() 함수를 통해 문자열을 대문자로 변환시킵니다.
그리고 문자열에서 문자 하나하나를 꺼내서 비교할 것 이기 때문에 toCharArray() 함수를 통해 문자형 배열로 변환시킵니다.
여기서 키 포인트는 앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열인지 검사하기 위해서는
문자열의 앞문자와 뒷문자가 같은지 비교해야 합니다.
따라서 앞에서부터 인덱스 역할을 할 lt와 뒤에서부터 인덱스 역할을 할 rt를 선언해줍니다.
그리고 문자열 길이보다 작을 때까지 반복문을 돌면서
lt에는 i를 더해주고 (예시 0 + 0,1,2,3,...)
rt에는 i를 빼줍니다. (예시 3 - 0,1,2,3,...)
윗 부분이 문자형 배열의 인덱스 역할을 하면서 문자 배열의 앞부분부터 읽어온 값과 뒷부분부터 읽어온 값을 차례로 비교하면서
값이 같으면 result에 YES를 담고
값이 다르면 result에 NO를 담고
최종적으로 result값을 출력해주면 됩니다.
'Computer Science > Algorithm' 카테고리의 다른 글
[Inflearn] 숫자만 추출 (0) | 2022.11.05 |
---|---|
[Inflearn] 팰린드롬 (0) | 2022.11.05 |
[Inflearn] 중복 문자 제거 (0) | 2022.11.02 |
[Inflearn] 특정 문자 뒤집기 (0) | 2022.10.30 |
[Inflearn] 단어 뒤집기 (0) | 2022.10.30 |