[Java] 백준 10988번: 팰린드롬인지 확인하기

hansung's·2024년 2월 20일
0

문제 url:
팰린드롬인지 확인하기

문제:

🤔 문제 파악하기

  • 앞 뒤가 똑같은 전화번호 단어이면 1, 아니면 0을 출력
  • 그렇다면 단어의 맨 처음 인덱스와 맨 뒤 인덱스가 같으면 그 후 i+1과 j-1 인덱스가 같다면.... 우리는 팰린드롬이라고 볼 수 있다.

😎 준비하기

1. 입력을 받을 BufferedReader 객체 생성
2. 단어 입력받기 
3. 단어의 인덱스 첫번째와 마지막이 같은지 확인하며 총 단어의 총 길이 /2 만큼 반복을 진행
↘왜 총 단어의 길이/2?? 
혹시 1~ 100까지 다 더한값을 구하는 함수를 생각해 본 경험이 있는가?? 
기억 난다면 아마 (n(n+1)) / 2 의 공식을 사용했던 것을 볼 수 있다. 이 때 2를 나눈것과 
같은 이유라고 보면 될 수 있다. 
그래도 필자는 기억을 못했기에 설명하면, 
앞뒤로 한칸씩 진행하기 때문에 글자 길이의 반만큼만 진행하면 된다고 생각하면 된다.

4. 해당 값이 맞으면 1을 출력, 그렇지 않으면 0을 출력

※이외 다른 방법으로 reverse()메서드를 이용한 방법도 설명해보겠다.

🐱‍👤 실제 코드


import java.io.*;
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        // 1. 단어 입력받기
        String word = br.readLine();
        boolean flag = true; // 플래그 변수를 이용해 팰린드롬인지를 구분

        // 2. 앞 뒤로 인덱스를 구분하며 움직이기 때문에 길이의 나누기 2만큼 반복
        for (int i = 0; i < word.length() / 2; i++) {
            if (word.charAt(i) != word.charAt(word.length()-1-i)) {
                flag = false;
            }
        }

		// 삼항 연산자를 이용해 true일 경우 1 false일 경우 0을 출력
        System.out.println(flag ? 1: 0);

    }
}

🐱‍👤 실제 코드 ver.2 (reverse를 이용한)


import java.io.*;
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        // 1. 단어 입력받기
        String word = br.readLine();
        StringBuilder sbd = new StringBuilder();

        String s = br.readLine();
        sbd.append(s).reverse();

        System.out.println(s.contentEquals(sbd) ? 1 : 0);

    }
}

풀이 해석:
StringBuilder 클래스의 reverse()메서드를 이용해 입력받은 단어의 역순을 구한다.
※문자열 String은 사용할 수 없기 때문에 반드시 StringBuilder로만 가능하다.
그 후 contentEqulas()메서드를 이용해 입력받은 단어와 역순의 단어가 같은지 확인

👏 ContentEquals()란? & equals와 contentEquals 비교

str.equals()

str 변수의 문자열과 매개변수('소괄호 안에 들어갈')의 문자열이 같다면 true를 반환하는 메서드
매개변수의 객체가 String의 인스턴스인지도 확인
즉, String 객체와 StringBuffer 객체의 문자열을 확인하지 못한다.


str.contentEquals()

str변수의 문자열과 매개변수의 문자열이 일치하다면 true를 반환하는 메서드
매개변수의 객체가 String의 인스턴스인지는 확인하지 않고 내용만 비교한다.
그래서 Sring 객체를 StringBuffer | String Builder | Char array 객체와 비교 O

🤢 트러블 슈팅

위에서 ContentEquals를 설명해놨지만, 처음에 eqauls, == 등 여러 방법을 사용해서 같은지를 확인해보았지만 해결하지 못하였고 StringBuilder에 대해서 알아보면서
ContentEquals()에 대해 찾아보며 해결할 수 있었다.

profile
ABAPER를 꿈꾸는 개발자

0개의 댓글