개발자는 기록이 답이다

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(문자열_유효한 팰린드롬) 본문

알고리즘/인프런 - Java알고리즘 입문

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(문자열_유효한 팰린드롬)

slow-walker 2023. 8. 28. 14:47

 

https://cote.inflearn.com/contest/10/problem/01-08

 

OnlineJudge

 

cote.inflearn.com

(위의 링크는 인프런 로그인 후, 해당 강의를 사지 않으면 접속이 되지 않습니다)

 

8. 유효한 팰린드롬
 

예시 입력 1 

found7, time: study; Yduts; emit, 7Dnuof

예시 출력 1

YES
 

내가 푼 풀이 (Time: 178ms Memory: 27MB)

 

그동안 배운걸 사용하면서 문제를 풀었다1. Character.isAlphabetic을 사용해서 알파벳만 StringBuilder로 담는다.2. 대문자로만 바꾼 String을 순회할때 길이를 절반 자르고 각 인덱스 값을 비교한다.

import java.util.Scanner;

public class Main {

    public String solution(String str) {
        String ans = "YES";
        char[] charArray = str.toCharArray();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < charArray.length; i++) {
            if (Character.isAlphabetic(charArray[i])) {
                sb.append(charArray[i]);
            }
        }
        
        String onlyString = sb.toString().toUpperCase();
        int len = onlyString.length();
        for (int i = 0; i < len / 2; i++) {
            if (onlyString.charAt(i) != onlyString.charAt(len - i - 1)) {
                ans = "NO";
            }
        }
        return ans;
    }

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

    }
}

 

 

강의 답안 (Time: 159ms Memory: 27MB)

- replaceAll()과 정규표현식으로 필요없는 문자를 제거하고 알파벳만 남겼다.

import java.util.Scanner;

public class Main {

    public String solution(String str) {
        String ans = "NO";
        str = str.toUpperCase().replaceAll("[^A-Z]", "");

        String tmp = new StringBuilder(str).reverse().toString();
        if (str.equals(tmp)) ans = "YES";
        return ans;
    }

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

    }
}