CodingTest

[백준 1259] 팰린드롬수

yeon.___.jin 2025. 4. 29. 13:07
반응형

처음에 간단하게 풀어 한 번에 정답을 맞출 수 있었다.

import java.util.ArrayList;
import java.util.Scanner;

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

        while(true){
            String s = sc.nextLine();
            if(s.equals("0")) break;
            else list.add(s);
        }

        for (String s : list) {
            boolean plan = true;
            for(int i=0; i<s.length()/2; i++){
                if(s.charAt(i) != s.charAt(s.length()-1-i)) plan = false;
            }
            if(plan) System.out.println("yes");
            else System.out.println("no");
        }
    }
}

 

하지만 코딩테스트를 준비하면서 문자열 입력을 Scanner로 받으면 메모리와 시간이 비효율적일 수 있다는 점을 경험했다.
특히 이전에 코딩테스트를 풀었을 때 시간 초과가 발생한 적이 있었다. 

 

배열(ArrayList)을 굳이 사용하지 않아도 되는 문제였지만, 문제에 나와있는 것과 출력 형식을 동일하게 맞추기 위해 배열을 사용했었다.

그러나 GPT에게 c물어보니, StringBuilder를 활용하면 배열 없이도 출력 결과를 문제와 동일하게 할 수 있다는 것을 알게 되었다. 

 

따라서, 이번 문제에서는 BufferedReaderStringBuilder를 사용해 코드를 수정해보았다.

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

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

        while (true) {
            String s = br.readLine();
            if (s.equals("0")) break;

            boolean isPalindrome = true;
            int len = s.length();

            for (int i = 0; i < len / 2; i++) {
                if (s.charAt(i) != s.charAt(len - 1 - i)) {
                    isPalindrome = false;
                    break;
                }
            }
            if (isPalindrome) sb.append("yes\n");
            else sb.append("no\n");
        }
        System.out.print(sb);
    }
}

 

처음에는 두 방법 사이에 별다른 차이가 없을 것이라고 생각했는데, 생각보다 실행 시간과 메모리 사용량 차이가 크게 나타나서 놀랐다.

이 문제를 통해, 입력과 출력 최적화의 중요성을 다시 한 번 느꼈고 앞으로 문제를 풀 때 좀 더 신경 써야겠다고 다짐하게 되었다.

반응형