Backend
home
🔡

[백준] 팰린드롬수

생성일
2025/03/17 14:31
태그
BaekJoon
게시일
2025/03/17
최종 편집 일시
2025/03/17 14:38

문제

해결 방안 고민

앞으로 읽었을 때와 뒤로 읽었을 때의 문자열이 같으면 된다.
이 조건을 잘 고려해야 한다.
배열을 활용할 수도 있겠지만 최대한 배열을 활용하지 않고 문제를 푼다.

해결 방법

무한 반복문을 돌려서 팰린드롬의 여부를 확인하고 0을 입력했을 때 반복문을 빠져나온다.
앞의 글자와 뒤의 글자를 비교할 수 있도록 인덱스 매칭을 해준다.
여기서 뒤의 글자를 지정하기 위해 idx 변수를 선언한다.
이분 탐색을 활용하여 문자열 길이의 절반만 반복하는 for문을 통해 같은지의 여부를 카운팅한다.
카운팅을 하는 이유는 앞의 문자와 뒤의 문자가 모두 같게 되면 문자열 길이의 절반만큼의 수가 나오기 때문이다.
세 가지 방법으로 풀이하였다.

코드

첫 번째 방법
package algo250317; import java.io.*; // 백준 - 팰린드롬수 (브론즈 1) public class Baek1259 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = ""; while (true) { str = br.readLine(); if (str.equals("0")) { break; } int length = str.length(); int idx = length - 1; int count = 0; for (int i = 0; i < length / 2; i++) { if (str.charAt(i) == str.charAt(idx)) { count++; } idx--; } if (count == length / 2) { System.out.println("yes"); } else { System.out.println("no"); } } } }
Java
복사
두 번째 방법 - StringBuilder 활용
package algo250317; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; // 백준 - 팰린드롬수 (브론즈 1) public class Baek1259_2 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb = new StringBuilder(); String str = ""; while (true) { str = br.readLine(); if (str.equals("0")) { break; } int length = str.length(); int idx = length - 1; int count = 0; for (int i = 0; i < length / 2; i++) { if (str.charAt(i) == str.charAt(idx)) { count++; } idx--; } if (count == length / 2) { sb.append("yes").append("\n"); } else { sb.append("no").append("\n"); } } System.out.print(sb); } }
Java
복사
세 번째 방법 - BufferedWriter 활용
package algo250317; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; public class Baek1259_3 { 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 str = ""; while (true) { str = br.readLine(); if (str.equals("0")) { break; } int length = str.length(); int idx = length - 1; int count = 0; for (int i = 0; i < length / 2; i++) { if (str.charAt(i) == str.charAt(idx)) { count++; } idx--; } if (count == length / 2) { bw.write("yes"); bw.newLine(); } else { bw.write("no"); bw.newLine(); } } bw.flush(); bw.close(); br.close(); } }
Java
복사

정리

속도는 2, 3 > 1 이렇게 나왔다.
확실히 StringBuilder가 속도 차이가 분명히 있음을 확인할 수 있었다.