반응형
문제
문자열이 입력되고 해당 문자열이 회문 문자열이면 YES 출력하고, 회문 문자열이 아니면 NO 출력하는 프로그램을 작성하세요. (단, 회문을 검사할 때 대소문자를 구분하지 않는다.)
✔ 회문 문자열
- 앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열 입니다.
입력
- 첫 줄에 길이 100을 넘지 않는 공백이 없는 문자열 입니다.
출력
- 첫 번째 줄에 회문 문자열인지의 결과를 YES or NO로 출력합니다.
Solution 1.
✨ 짝수, 홀수 상관없이 (길이/2)까지만 잘라서 양끝을 비교하면 된다.
g o | o d - (4/2)인 두 번째 char까지 잘라서 양끝을 비교한다.
s t | u | t s - (5/2)인 두번째 char까지 잘라서 양끝 비교하고, 홀수는 가운데는 하나뿐이므로 비교할 필요가 없다.
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Main m = new Main();
Scanner scan = new Scanner(System.in);
String str = scan.nextLine();
System.out.println(m.solution(str));
}
private 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)) return "NO";
}
return answer;
}
}
Solution 2.
✨ 입력 받은 문자열을 뒤집어서 기존의 문자열과 같은지 비교한다.
🌈 StringBuilder
- String과 문자열을 더할 때 새로운 객체를 생성하지 않는다.
- 기존의 데이터에 더하는 방식을 사용하기 때문에, 속도가 빠르며 상대적인 부하가 적다.
- 또한 여러가지 함수를 사용할 수 있게 된다.
🌈 equalsIgnoreCase(string)
- 대소문자 구분 없이 문자열 비교한다.
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Main m = new Main();
Scanner scan = new Scanner(System.in);
String str = scan.nextLine();
System.out.println(m.solution(str));
}
private String solution(String str) {
String answer = "NO";
String tmp = new StringBuilder(str).reverse().toString();
if(str.equalsIgnoreCase(tmp)) answer="YES";
return answer;
}
}
Solution 3.
🌈 reverse()
- String클래스는 reverse()를 제공하지 않아 변환해서 reverse()를 사용해야 한다.
- StringBuilder, StringBuffer, Collection클래스에서 reverse() 메서드를 제공한다.
- String 문자열을 반전시키기 위해서는 위의 클래스로 변환해서 사용해야 한다.
import java.util.Locale;
import java.util.Scanner;
public class Main {
public static void Solution(String str){
str = str.toLowerCase(Locale.ROOT);
StringBuilder builder = new StringBuilder(str).reverse();
if(builder.toString().equals(str)){
System.out.println("YES");
}else{
System.out.println("NO");
}
}
public static void main(String[] args){
Scanner in=new Scanner(System.in);
String input = in.next();
Solution(input);
}
}
반응형
'Java' 카테고리의 다른 글
[React] 비밀번호 암호화 하기 (crypto, sha256) (0) | 2022.11.30 |
---|---|
[알고리즘/JAVA] String(문자열) - 중복문자제거 (0) | 2022.11.29 |
[NextJS/Ts] 카카오 지도 띄우기 (0) | 2022.11.16 |
[React] .env 환경 구분 (prod / dev / local) (0) | 2022.10.21 |
[Spring] Profiles - 환경 구분(dev / prod / local) (0) | 2022.10.21 |