유리쯔의일상 2023. 10. 18. 17:44
반응형

👇 공부한 자료들의 실제 소스파일들을 기록해논 공간입니다 👇

https://github.com/gayulz/StudyHistory.git

 

GitHub - gayulz/Study: 나의 공부 기록 commit

나의 공부 기록 commit . Contribute to gayulz/Study development by creating an account on GitHub.

github.com

 

 

오늘의 문제

 

 

 

 

문제 해결 고민

  1. 대소문자를 구분하지 않는 다 라고한다.
  2. 입력값이 소문자와 대문자가 섞여있을 경우 전체 대문자로 바꾸자
  3. 비교하는 식을 고민해보자

 

 

 

 

 

나의 풀이 

import java.util.Scanner;  

class Main {  
    public String solution(String str) {  
        String answer = "";  
        String tmpStr = str.toUpperCase();  
        boolean flag = false;  
        int rtPoint = tmpStr.length()-1;  
        for (int i = 0; i < str.length(); i++) {  
            char tmp = tmpStr.charAt(i);  
            if ( i == tmpStr.length()/2 ){  
                break;  
            }  
            if (tmp == tmpStr.charAt(rtPoint)){  
                flag = true;  
                rtPoint--;  
            } else {  
                flag = false;  
                break;  
            }  
        }  
        if ( flag == false ) answer = "NO";  
        else if ( flag == true ) answer = "YES";  
        return answer;  
    }  

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

 

 

 

 

 

 

쌤의 풀이

public class chapter_7 {  
    public String solution(String str){  
        String answer = "NO";  
        String tmp = new StringBuilder(str).reverse().toString();  
        if (str.equalsIgnoreCase(tmp)) answer = "YES";  
//        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;  
    }  
    public static void main(String[] args) {  
        Scanner in = new Scanner(System.in);  
        chapter_7 T = new chapter_7();  
        String str = in.nextLine();  
        System.out.println(T.solution(str));  
    }  
}
0 1 2 3
g o o G

회문 문자라는건 앞 뒤가 똑같은 단어를 말한다.
팰린드룸 이라고도 한다.
앞 뒤가 똑같기 때문에 length의 절반만 돌면 앞 뒤가 같은지 비교 할 수 있다.

gooG 문자열 같은 경우 인덱스가 총 4개 나누기 2 를 해서 절반만 비교하는데
lenght-1을 하여 반복 해서 같은지만 확인하면 된다.
짝수가 아닌 홀수인 경우에도 절반까지만 돌면 된다
예를들어

0 1 2 3 4
S t u t s

인 경우 u를 가운데 두고 양 사이드에 글자들이 같은 지만 보면 되기 때문이다

        int len = str.length();  
        for (int i = 0; i < len / 2; i++) {  
            if (str.charAt(i)!=str.charAt(len-i-1)) return "NO";  
        }

쌤의 경우 solution 메서드 안에 해당 for문을 먼저 사용하여 처리하였다.
또는 다른 방식을 알려주셨다

String tmp = new StringBuilder(str).reverse().toString();  
if (str.equalsIgnoreCase(tmp)) answer = "YES";

 

 

 

equalsIgnoreCase 메서드

문자열을 비교하는 함수이다.
보통 equlsIgnoreCase는 대소문자 구분 없이 비교할때 주로 사용된다.
equals 는 대소문자를 비교하지만, equalsIgnoreCase는 대소문자 구별없이
문자열 자체만으로 비교한다고 한다.

문법 : equalsIgnoreCase( 문자열 )

 

반응형