본문 바로가기
알고리즘 문제풀이

[알고리즘/인프런]1-8 유효한 펠린드롬(인프런 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비 강의)

by jeonghaemin 2021. 5. 5.
728x90

인프런의 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비 강의를 수강하며 예습 풀이 코드, 강의에서 설명하는 풀이 코드를 정리하고 있습니다.

내 풀이

  • 입력된 문자열을 대문자로 변환
  • Character.isAlphabetic()메서드를 사용하여 알파벳인 경우에만 문자를 비교
import java.io.*;

public class Main {

    public String solution(String s) {
        char[] chars = s.toUpperCase().toCharArray();
        int left = 0;
        int right = chars.length -1;

        while (left < right) {
            if (!Character.isAlphabetic(chars[left])) {
                left++;
                continue;
            }

            if (!Character.isAlphabetic(chars[right])) {
                right--;
                continue;
            }

            if (chars[left] != chars[right]) {
                return "NO";
            }

            left++; right--;
        }

        return "YES";
    }

    public static void main(String[] args) throws IOException {
        Main T = new Main();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String s = br.readLine();
        System.out.println(T.solution(s));
    }
}

강의 풀이

  • s=s.toUpperCase().replaceAll("[^A-Z]", "");
  • 입력한 문자열을 대문자로 변환
  • String 클래스의 replaceAll()메서드에 정규식을 사용하여 알파벳 대문자를 제외한 모든 문자 제거
  • StringBuilder의 reverse() 메서드를 사용하여 입력된 문자열을 뒤집어 원래 문자열과 같은지 비교
import java.util.*;

class Main {    
    public String solution(String s){
        String answer="NO";
        s=s.toUpperCase().replaceAll("[^A-Z]", "");
        String tmp=new StringBuilder(s).reverse().toString();
        if(s.equals(tmp)) answer="YES";
        return answer;
    }

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

댓글