[Java] 팰린드롬 확인

정석·2023년 12월 27일

알고리즘 학습

목록 보기
2/67
post-thumbnail

1. 문제

  • 입력받은 문자열이 거꾸로 읽어도 같은 단어이면 팰린드롬이라 한다.

2. 풀이

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class main3 {

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		String Input = bf.readLine();

		int k = Input.length() - 1;
		int i = 0;
		Boolean isPalindrome = true;

		while (i < k) {
			if (!Input.substring(i, i + 1).equals(Input.substring(k, k + 1))) {
				isPalindrome = false;
			}

			i++;
			k--;

		}

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

	}
}
  • 사용자에게 받은 문자를 Input 변수에 저장한 뒤 substring 메소드를 활용하여 문자열의 앞과 뒤를 비교하도록 하였다.

  • isPalindrome 이란 변수를 boolean 으로 초기화 하여 true, false 를 통해 결과값을 출력하도록 한다.

3. 알게된 점

  • 입력받은 문자열을 하나씩 배열에 저장할 때 toCharArray() 메소드를 활용하자. 항상 subString 으로 하나씩 잘라서 저장했는데 이러한 메소드가 있어 놀라웠다.

💡입력받은 문자열을 배열에 문자 하나씩 저장하는 방법

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
	public static void main( String[] args) throws Exception {
		BufferedReader br = new BufferedReader( new InputStreamReader( System.in));
		
		char[] str = br.readLine().toCharArray(); // 배열 선언과 동시에 입력 받으면서 저장
		
		for( int i = 0; i < str.length/2; i++) {
			if( !(str[i] == str[str.length-1-i])) {
				System.out.println(0);
				return;
			}
		}
		
		System.out.println(1);
	}
}
  • 값을 비교하여 두 가지의 경우로 결과 값이 나오는 경우 boolean 을 활용하여 마지막에 결과를 if 문 형식으로 출력할 것.
  • 처음에 시도할 땐 문자열을 배열로 만들어 배열의 값끼리 == 으로 비교했지만 실패했다.

▶︎ 실패한 코드

while(j<Input.length()) {
			if (inputArray[j] == inputArray[k]) {
				k--;
				j++;
				System.out.println("j : " + inputArray[j] + " i : " + inputArray[k]);
				
			} else {
				System.out.println("j : " + inputArray[j] + " i : " + inputArray[k]);
				
				System.out.println("0");
				break;
			}
		}
  • == 연산자는 객체 참조를 비교하는 연산자이기에 문자열 비교엔 사용하면 안된다.
  • 문자열 비교는 equals() 메소드를 사용한다.

0개의 댓글