https://www.acmicpc.net/problem/1259
문제 간단 요약
- 입력된 정수가 팰린드롬이면 "yes", 아니면 "no" 출력
문제 해석
- 간단한 구현문제로, 결국 좌/우를 확인하는 문제
문제풀이
- 투 포인터, StringBuilder의 reverse() 내장함수 같은 다른 방법도 있지만
- 좌/우가 한 쌍을 이루는지 확인하는 점에서 스택을 이용해서 풀기로 결정
- 스택에 입력받은 문자열의 절반을 push한다.
- 절반 이후부터는 스택의 top과 비교하며 같으면 pop, 아니면 반복문 탈출을 한다.
- 위 과정이 진행된 후 스택이 비어있으면 입력된 수는 팰린드롬이다.
막힌 부분
가운데 수 처리
- 홀수인 경우, 가운데 수는 짝을 이루지 않아도 팰린드롬이다.
해결방법
- 홀수인 경우, 한 칸 더 움직인 후 top과의 비교를 시작하는 것으로 예외처리를 했다.
배운 것/느낀 것
- 코드를 짜기 전에 먼저 생각하고 예외를 생각해보자.
- "재충 이렇게 짜고, 이정도면 통과하겠지"라는 생각으로 문제를 풀지 말고,
- 해석 ➡️ 분석 ➡️ 결정 ➡️ 구현 의 과정을 거처서 문제를 풀자.
제출코드
import java.util.Scanner;
import java.util.Stack;
class Main {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
while (true) {
// 입력 범위가 99999이하이기 때문에 스택은 5자리만 있으면 된다.
Stack<Character> stack = new Stack<>();
String input = sc.next();
int middle = input.length() / 2;
//탈출 조건
if (input.equals("0")) break;
// 절반까지는 push
for (int i = 0; i < middle; i++)
stack.push(input.charAt(i));
// 절반 이후부터 스택의 top과 비교
// 홀수인 경우 추가 처리
if (input.length() % 2 != 0) middle++;
for (int i = middle; i < input.length(); i++) {
if (stack.peek() == input.charAt(i))
stack.pop();
else
break;
}
// 팰린드롬 확인
if (stack.isEmpty()) System.out.println("yes");
else System.out.println("no");
}
}
}
'백준' 카테고리의 다른 글
백준 15829 - Hashing - Java (0) | 2024.10.28 |
---|---|
백준 9935 - 문자열 폭발 - Java (1) | 2024.09.20 |
백준 2420 - 사파리 월드 - Java (0) | 2024.08.27 |
백준 2839번 - 설탕배달 문제 - Java (0) | 2023.07.17 |
백준 1018 - 체스판 문제 - Java (0) | 2023.07.16 |
https://www.acmicpc.net/problem/1259
문제 간단 요약
- 입력된 정수가 팰린드롬이면 "yes", 아니면 "no" 출력
문제 해석
- 간단한 구현문제로, 결국 좌/우를 확인하는 문제
문제풀이
- 투 포인터, StringBuilder의 reverse() 내장함수 같은 다른 방법도 있지만
- 좌/우가 한 쌍을 이루는지 확인하는 점에서 스택을 이용해서 풀기로 결정
- 스택에 입력받은 문자열의 절반을 push한다.
- 절반 이후부터는 스택의 top과 비교하며 같으면 pop, 아니면 반복문 탈출을 한다.
- 위 과정이 진행된 후 스택이 비어있으면 입력된 수는 팰린드롬이다.
막힌 부분
가운데 수 처리
- 홀수인 경우, 가운데 수는 짝을 이루지 않아도 팰린드롬이다.
해결방법
- 홀수인 경우, 한 칸 더 움직인 후 top과의 비교를 시작하는 것으로 예외처리를 했다.
배운 것/느낀 것
- 코드를 짜기 전에 먼저 생각하고 예외를 생각해보자.
- "재충 이렇게 짜고, 이정도면 통과하겠지"라는 생각으로 문제를 풀지 말고,
- 해석 ➡️ 분석 ➡️ 결정 ➡️ 구현 의 과정을 거처서 문제를 풀자.
제출코드
import java.util.Scanner;
import java.util.Stack;
class Main {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
while (true) {
// 입력 범위가 99999이하이기 때문에 스택은 5자리만 있으면 된다.
Stack<Character> stack = new Stack<>();
String input = sc.next();
int middle = input.length() / 2;
//탈출 조건
if (input.equals("0")) break;
// 절반까지는 push
for (int i = 0; i < middle; i++)
stack.push(input.charAt(i));
// 절반 이후부터 스택의 top과 비교
// 홀수인 경우 추가 처리
if (input.length() % 2 != 0) middle++;
for (int i = middle; i < input.length(); i++) {
if (stack.peek() == input.charAt(i))
stack.pop();
else
break;
}
// 팰린드롬 확인
if (stack.isEmpty()) System.out.println("yes");
else System.out.println("no");
}
}
}
'백준' 카테고리의 다른 글
백준 15829 - Hashing - Java (0) | 2024.10.28 |
---|---|
백준 9935 - 문자열 폭발 - Java (1) | 2024.09.20 |
백준 2420 - 사파리 월드 - Java (0) | 2024.08.27 |
백준 2839번 - 설탕배달 문제 - Java (0) | 2023.07.17 |
백준 1018 - 체스판 문제 - Java (0) | 2023.07.16 |