JAVA

[문제풀이] 백준 JAVA - #10988 팰린드롬인지 확인하기

유난25 2023. 7. 19. 17:00

문제

알파벳 소문자로만 이루어진 단어가 주어진다. 이때, 이 단어가 팰린드롬인지 아닌지 확인하는 프로그램을 작성하시오.

팰린드롬이란 앞으로 읽을 때와 거꾸로 읽을 때 똑같은 단어를 말한다. 

level, noon은 팰린드롬이고, baekjoon, online, judge는 팰린드롬이 아니다.

입력

첫째 줄에 단어가 주어진다. 단어의 길이는 1보다 크거나 같고, 100보다 작거나 같으며, 알파벳 소문자로만 이루어져 있다.

출력

첫째 줄에 팰린드롬이면 1, 아니면 0을 출력한다.

예제 입력 1 복사

level

예제 출력 1 복사

1

예제 입력 2 복사

baekjoon

예제 출력 2 복사

0

내가 작성한 코드

import java.util.*;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		String S = sc.next();
		String[] arr = new String[S.length()];	// 입력받은 문자열을 저장할 배열
		String[] reArr = new String[S.length()]; // 저장한 배열을 뒤집어서 저장할 배열
        
		for (int i = 0; i < S.length(); i++) {		// 입력받은 문자열을 arr[]에 저장
			arr[i] = String.valueOf(S.charAt(i));
		}

		for (int i = 0; i < S.length(); i++) {		// arr[]을 뒤집어서 저장할 reArr[]
			reArr[arr.length - 1 - i] = arr[i];
		}

		if (Arrays.equals(arr, reArr)) {	// arr[]과 reArr[] 비교
			System.out.println("1");
		} else {
			System.out.println("0");
		}
	}
}

결과

 

 

GPT가 알려주는 효율적인 코드

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        String S = sc.next();

        // 문자열의 길이만큼 시작과 끝을 가리키는 포인터를 초기화합니다.
        int start = 0;
        int end = S.length() - 1;
        boolean isPalindrome = true;

        // 시작 포인터와 끝 포인터가 중간에서 만날 때까지 문자를 비교하여 회문인지 확인합니다.
        while (start < end) {
            if (S.charAt(start) != S.charAt(end)) {
                isPalindrome = false;
                break;
            }
            start++;
            end--;
        }

        if (isPalindrome) {
            System.out.println("1");
        } else {
            System.out.println("0");
        }
    }
}

 

 위 수정된 코드와 동일한 기능을 수행하지만, 불필요한 배열과 Arrays.equals() 메서드를 사용하지 않아 더 효율적이라고 한다.

 좀 더 공부를 해서 효율적인 코드를 짤 수 있도록 해야겠다.