문제
백준 10988번
거꾸로 읽어도 원래 단어와 같은 것을 팰린드롬이라고 한다.
팰린드롬이면 1을, 아니면 0을 출력한다.
풀이 1) StringBuilder의 reverse()
StringBuilder의 reverse()를 사용하여 원래 문자열과 비교
코드
import java.util.*;
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));
StringBuilder sb = new StringBuilder();
//문자열 받아서 거꾸로 뒤집기
//비교 후 같으면 1, 아니면 0 출력
String str = br.readLine();
String revStr = String.valueOf(sb.append(str).reverse());
if(str.equals(revStr)) {
bw.write(1+" ");
}else bw.write(0+" ");
bw.close();
}
}
//더 간결하게 만든 코드
import java.util.*;
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));
StringBuilder sb = new StringBuilder(br.readLine());
bw.write((sb.toString().equals(sb.reverse().toString())?1:0)+ "\n");
bw.close();
}
}
간결한 코드(위)가 오히려 성능이 안 좋았다.
풀이 2) for문으로 문자 하나하나 비교
result를 1로 초기화
문자열의 i번째, str.length()-i-1번째 문자를 비교 -> str.length()/2번 반복
문자가 다르면 result에 0 대입
코드
import java.util.*;
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 str = br.readLine();
int result = 1;
for(int i=0; i<str.length()/2; i++) {
//문자열 길이/2만큼 반복하며 대칭에 있는 글자가 같은지 비교
if(str.charAt(i) != str.charAt(str.length()-i-1)) {
result = 0;
}
}
bw.write(result+" ");
bw.close();
}
}
Note
바로 전 별찍기 문제도 그렇고 for문의 반복 횟수를 잘못 설정해서 자꾸 틀린다. 주의하자
'BOJ' 카테고리의 다른 글
[백준 2941번/JAVA] 크로아티아 알파벳 (0) | 2024.03.11 |
---|---|
[백준 1157번/JAVA] 단어 공부 (0) | 2024.03.11 |
[백준 2224번/JAVA] 별 찍기 - 7 (0) | 2024.03.11 |
[백준 2908/JAVA] 상수 | StringBuffer와 StringBuilder의 차이 (0) | 2024.03.09 |
[백준 1152/JAVA] 단어의 개수 (0) | 2024.03.08 |