오늘보다 더 나은 내일의 나에게_

자바 알고리즘 문제 풀이 String Q07_회문 문자열 본문

ALGORITHM/inflearn_javaAlgorithm

자바 알고리즘 문제 풀이 String Q07_회문 문자열

chan_96 2022. 1. 28. 14:04
728x90
설명

앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열을 회문 문자열이라고 합니다.

문자열이 입력되면 해당 문자열이 회문 문자열이면 "YES", 회문 문자열이 아니면 “NO"를 출력하는 프로그램을 작성하세요.

단 회문을 검사할 때 대소문자를 구분하지 않습니다.


입력

첫 줄에 길이 100을 넘지 않는 공백이 없는 문자열이 주어집니다.


출력

첫 번째 줄에 회문 문자열인지의 결과를 YES 또는 NO로 출력합니다.

 


예시 입력1


예시 출력

gooG YES

 

코드

내가 입력한 코드

package String;

import java.util.Scanner;

public class Q07 {
	public String solution(String str) {
		String answer = "";
		String lowStr = str.toLowerCase();
		StringBuffer sb = new StringBuffer(str.toLowerCase());
		String x = sb.reverse().toString();

		if(lowStr.equals(x.toLowerCase())) {
			answer = "YES";
		}else {
			answer = "NO";			
		}
		return answer;
	}
	
	public static void main(String[] args) {
		Q07 T = new Q07();
		Scanner kb = new Scanner(System.in);
		String str = kb.next();
				
		System.out.println(T.solution(str));
	}
}

 




해설 코드

import java.util.*;
class Main {	
	public String solution(String str){
		String answer="YES";
		str=str.toUpperCase();
		int len=str.length();
		for(int i=0; i<len/2; i++){
			if(str.charAt(i)!=str.charAt(len-i-1)) answer="NO";
		}
		return answer;
	}

	public static void main(String[] args){
		Main T = new Main();
		Scanner kb = new Scanner(System.in);
		String str=kb.next();
		System.out.print(T.solution(str));
	}
}

import java.util.*;
class Main {	
	public String solution(String str){
		String answer="NO";
		String tmp=new StringBuilder(str).reverse().toString();
		if(str.equalsIgnoreCase(tmp)) answer="YES";
		return answer;
	}

	public static void main(String[] args){
		Main T = new Main();
		Scanner kb = new Scanner(System.in);
		String str=kb.next();
		System.out.print(T.solution(str));
	}
}

 

 

풀이 및 정리 

먼저 회문 문자열에 대해 처음 들어 봤다.

회문 문자열이란?
=> 앞으로 읽거나 뒤로 읽어도 같은 문자!

해설 코드에서는 2가지 방법에 대한 코드가 있다. 한 가지 방법은 내가 풀이한 코드와 유사하다.
그렇지만 소문자 대문자를 무시하고 비교하는 equalsIgnoreCase()라는 메서드를 사용하였다.

equalsIgnoreCase() => 대 소문자 구분하지 않고 비교!!

나머지 한 가지 방법은 문자열의 첫 글자와 끝 글자를 비교하고 그다음에는 첫 글자 뒷글자와 끝 글자 앞글자를 비교하는 반복적인 방식이다. 만약 문자열 길이가 4라면 index는 2개만 있으면 된다! 만약 문자열 길이가 7이라면 3개의 index만 있으면 된다!

추가적으로 answer라는 변수에 "YES", "NO"로 초기화 해주는게 좀 더 효율적인 방법인 듯하다!
728x90
Comments