본문 바로가기

백준/브론즈 탈출하기

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

https://www.acmicpc.net/problem/10988

 

 

접근 방법

import java.io.*;
import java.util.*;

public class Main{
    public static void main(String[] args) throws IOException{
       BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
       BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
       String input = br.readLine();
       
       StringTokenizer st = new StringTokenizer(br.readLine());
     
       char[] arr1 = new char[input.length()/2];
       char[] arr2 = new char[input.length()/2];
       
       for(int i=0; i<input.length()/2; i++) {
    	   arr1[i] = input.charAt(i);
       }
       
       for(int j=input.length()-1; j>input.length()/2; j--) {
    	   arr2[j] = input.charAt(j);
       }
       
       if(arr1[i]==arr2[j]) {
    	   bw.write("1");
       }
       else
    	   bw.write("0");

      
       br.close();
       bw.flush();
       bw.close();
       }
    
}

arr2의 반복문 배열 인덱스, if 조건문 때문에 틀린 코드이다.

배열 1 : index 0 ~ index [input.length()/2]

배열 2 : index -1 ~ indexl[input.length()/2]

 

반복문으로 배열에 각 문자들 할당 후 반복문으로 다시 두 배열이 동일한지 확인

1 or 0 출력

 

정답 코드1 (반복문 3개)

import java.io.*;

public class Main{
    public static void main(String[] args) throws IOException{
       BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
       BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
       String input = br.readLine();

       char[] arr1 = new char[input.length()/2];
       char[] arr2 = new char[(input.length()+1)/2];
       
       for(int i=0; i<input.length()/2; i++) {
    	   arr1[i] = input.charAt(i);
       }
       
       for (int j = input.length() - 1; j >= input.length()/2; j--) {
           arr2[j - input.length() / 2] = input.charAt(j);
       }
       
       boolean isEqual = true;
       
       for(int i=0; i<arr1.length; i++) {
    	   if(arr1[i]!=arr2[arr2.length-1-i]) {
    		   isEqual = false;
    		   break;
    	   }
       }
       if(isEqual) {
    	   bw.write("1");
       }
       else
    	   bw.write("0");
 
       br.close();
       bw.flush();
       bw.close();
       }
    
}

 

정답 코드2 (다른 분의 블로그를 참고해서 간결)

import java.io.*;

public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        String input = br.readLine();
        
        int result = 1;
        
        for(int i=0; i<input.length()/2; i++){
            if(input.charAt(i) != input.charAt(input.length()-1-i)){
                result=0; // 팰린드롬이 아닐 경우 result<-0
            }
        }
        bw.write(String.valueOf(result));
        
        br.close();
        bw.flush();
        bw.close();
    }
}

참고한 블로그 : https://auyeol-coding.tistory.com/51

 

2번 코드가 더욱 간결하고 쉽습니다.

저의 1번 코드는 불필요한 반복문 남발..