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가 속도 차이가 분명히 있음을 확인할 수 있었다.