Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 자료구조
- 알고리즘
- 데이터베이스
- C
- 자바스크립트
- 1일1코테
- 오블완
- 갭체크
- 웹
- 코딩테스트
- 프로그래머스
- 99클럽
- 코딩테스트준비
- 개발자취업
- 연결 리스트
- til
- 프로그래밍 언어
- 코테공부
- 항해99
- 파이썬
- 코드트리
- 개발자루틴
- 티스토리챌린지
- Java
- 플로이드-워셜
- 인접 행렬
- 자바
- 운영체제
- #코드트리 #코딩테스트 #코테공부 #백트래킹 #알고리즘 기초
- 코딩테스트사이트추천
Archives
- Today
- Total
와드의 블로그
10988번: 팰린드롬인지 확인하기 본문
문제
주어진 단어가 팰린드롬인지 확인하는 문제입니다. 팰린드롬이란 앞으로 읽을 때와 거꾸로 읽을 때 똑같은 단어를 말합니다. (예: "level", "noon"은 팰린드롬이고, "baekjoon", "online"은 팰린드롬이 아닙니다.)
- 입력: 첫째 줄에 알파벳 소문자로만 이루어진 단어가 주어집니다. (단어의 길이는 1 이상 100 이하)
- 출력: 첫째 줄에 팰린드롬이면 1, 아니면 0을 출력합니다.
풀이 1: StringBuilder의 reverse() 활용
문자열을 다루는 데 특화된 자바의 StringBuilder 클래스를 활용하면 코드를 매우 직관적이고 간결하게 작성할 수 있습니다.
- 문자열 뒤집기: StringBuilder에서 제공하는 reverse() 메서드를 사용하여 원본 문자열을 역순으로 뒤집은 문자열을 만듭니다.
- 문자열 비교: String 클래스의 equals() 메서드를 사용하여 원본 문자열과 뒤집힌 문자열이 일치하는지 확인합니다. 일치하면 "1", 다르면 "0"을 삼항 연산자를 통해 출력합니다.
코드 1
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 객체 생성
StringBuilder sb = new StringBuilder(br.readLine());
// 원본 문자열과 뒤집은 문자열 저장
String s = sb.toString();
String t = sb.reverse().toString();
// 두 문자열이 같으면 1, 다르면 0을 삼항 연산자로 출력
bw.write(s.equals(t) ? "1" : "0");
bw.flush();
}
}
풀이 2: 인덱스 활용
문자열 객체를 새로 생성하지 않고, 문자열의 양 끝 인덱스에서 시작하여 중심부로 이동하며 문자를 하나씩 비교하는 정석적인 방법입니다.
- 탐색 범위 최적화: 문자열의 양 끝에서 동시에 비교해 들어오므로, 문자열 길이의 절반(len / 2)까지만 반복문을 수행하면 됩니다.
- 인덱스 비교: i번째 문자와 대칭되는 위치인 len - 1 - i번째 문자를 비교합니다.
- 불일치 판별: 비교 도중 단 하나라도 문자가 다르다면 팰린드롬이 아니므로 플래그 변수를 false로 바꾸고 반복문을 즉시 종료(break)합니다.
코드 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 s = br.readLine();
int len = s.length();
boolean isPalindrome = true;
// 문자열의 양 끝에서부터 중심을 향해 비교
// 전체 길이의 절반만 탐색하면 됨
for (int i = 0; i < len / 2; i++) {
// 앞쪽 문자(i)와 대칭되는 뒤쪽 문자(len - 1 - i)가 다르면
if (s.charAt(i) != s.charAt(len - 1 - i)) {
isPalindrome = false;
break; // 더 이상 비교할 필요가 없으므로 종료
}
}
// 플래그 변수 상태에 따라 결과 출력
bw.write(isPalindrome ? "1" : "0");
bw.flush();
}
}
알고리즘 분류
문자열 처리 (String), 구현 (Implementation)
'PS > B.O.J' 카테고리의 다른 글
| 11655번: ROT13 (0) | 2026.03.19 |
|---|---|
| 1159번: 농구 경기 (0) | 2026.03.19 |
| 2979번: 트럭 주차 (0) | 2026.03.19 |
| 10808번: 알파벳 개수 (0) | 2026.03.19 |
| 2309번: 일곱 난쟁이 (0) | 2023.03.04 |