일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- CSTS 폭포수 모델
- java.sql.SQLSyntaxErrorException
- tomcat log
- 피보나치함수 예제
- katalon 자동화
- javascript 자동완성
- 주식 양도세 신고방법
- git 연동
- 톰캣 실시간 로그
- katalon
- 국세청 해외주식 양도세 신고방식
- bfs 미로탐색 java
- katalon 비교
- 테스트 자동화
- 피보나치 예제
- 재귀함수 예제
- 한국투자증권 해외주식 양도세
- 재귀 예제
- recursion example
- Katalon Recorder 사용법
- 한국투자증권 양도세 신고
- 해외증권 양도세 한국투자증권
- 최대공약수 예제
- oracle group by
- katalon 사용법
- js 자동완성
- 해외주식 양도세 신고
- 피보나치함수
- katalon xpath
- 홈택스 해외주식 양도세
- Today
- Total
엄지월드
팰린드롬 본문
팰린드롬이란?
앞에서부터 읽어도, 뒤에서부터 읽어도 동일한 문자열이다.
예로 들면 ab는 팰린드롬이고, abb는 팰린드롬이 아니고 aba는 팰린드롬이다.
쉬운 문제로 가끔 문제로 출제될 수도 있는데, 알고 있으면 쉽게 풀 수 있기에 공유해 보고자 한다.
기본적인 팰린드롬을 판별하는 방법은 for문을 활용해서 뒤에서부터 앞에까지 읽어왔을 때에 동일하다면 팰린드롬으로 보면 된다.
팰린드롬 문제에서는 기본적으로는 팰린드롬을 구현하기 때문에 메서드로 만들어 놓고 문제를 풀어보면 좋을듯하다.
하단에 팰린드롬을 학습할 수 있는 문제들을 단계별로 모아보았다.
만약 풀이가 궁금해서 들어오신 분들은 바로 해당 문제의 접근 방법과 풀이를 확인해 보면 될 것 같다.
팰린드롬인지 확인하기(브론즈2)
https://www.acmicpc.net/problem/10988
[풀이]
- 가장 앞에 문자와 뒤에 문자를 비교 진행
- 모두 비교할 필요가 없으므로 s.length()/2를 해서 반만 비교
package Baekjoon;
import java.util.Scanner;
public class BOK_10988 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println(palindrome(sc.next()));
}
static int palindrome(String s){
if(s.length() == 1) return 1;
for(int i=0; i<s.length()/2; i++){
if(s.charAt(i) != s.charAt(s.length()-1-i)){
return 0;
}
}
return 1;
}
}
팰린드롬(실버5)
https://www.acmicpc.net/problem/8892
[풀이]
- A문자와 B문자를 AB, BA 이런식으로 앞뒤로 붙여가면서 Palindrome인지 비교
- Palindrome을 비교하는 부분은 따로 메소드로 분리해주었음.
- 문자열 추가 시 약간의 성능을 기대하고자 StringBuffer 사용
package Baekjoon;
import java.util.ArrayList;
import java.util.Scanner;
public class BOK_8892 {
public static void main(String[] args) {
solution();
}
static void solution(){
Scanner sc = new Scanner(System.in);
ArrayList<ArrayList> totalArray = new ArrayList<>();
int T = sc.nextInt();
int k;
for(int i=0; i<T; i++){
k = sc.nextInt();
ArrayList<String> array = new ArrayList<>();
for(int j=0; j<k; j++){
array.add(sc.next());
}
totalArray.add(array);
}
for(int i=0; i<totalArray.size(); i++){
boolean isPalindrome = false;
for(int j=0; j<totalArray.get(i).size()-1; j++){
for(int z=j+1; z<totalArray.get(i).size(); z++){
StringBuffer sb = new StringBuffer();
sb.append(totalArray.get(i).get(j));
sb.append(totalArray.get(i).get(z));
if(palindrome(String.valueOf(sb))){
System.out.println(String.valueOf(sb));
isPalindrome = true;
break;
}
sb = new StringBuffer();
sb.append(totalArray.get(i).get(z));
sb.append(totalArray.get(i).get(j));
if(palindrome(String.valueOf(sb))){
System.out.println(String.valueOf(sb));
isPalindrome = true;
break;
}
}
if(isPalindrome) {
break;
}
}
if(!isPalindrome){
System.out.println("0");
}
}
}
static boolean palindrome(String s){
for(int i=0; i<s.length()/2; i++){
if(s.charAt(i) != s.charAt(s.length()-1-i)){
return false;
}
}
return true;
}
}
팰린드롬 만들기(실버2)
https://www.acmicpc.net/problem/1254
[풀이]
- 만약 입력한 문자가 팰린드롬이면 바로 문자의 크기를 출력
- 앞에서부터 문자를 지워나가면서 팰린드롬인지 확인 (palindrome(s.substring(i, s.length())) 후, 팰린드롬이 되면 지워진 숫자만큼 더해주어 출력 s.length()+i
package Baekjoon;
import java.util.Scanner;
// 팰린드롬 만들
public class BOK_1254 {
public static void main(String[] args) {
System.out.println(solution());
}
static int solution(){
Scanner sc = new Scanner(System.in);
String s = sc.next();
if(palindrome(s)){
return s.length();
}
for(int i=1; i<s.length(); i++) {
if(palindrome(s.substring(i, s.length()))){
return s.length()+i;
}
}
return 0;
}
static boolean palindrome(String s){
for(int i=0; i<s.length(); i++){
if(s.charAt(i) != s.charAt(s.length()-1-i)){
return false;
}
}
return true;
}
}
'알고리즘' 카테고리의 다른 글
[백준] 2178 미로 탐색 (BFS) (0) | 2022.07.27 |
---|---|
기술면접 준비 (0) | 2022.07.08 |
그리디 알고리즘 (0) | 2022.06.28 |
순환(Recursion)의 개념과 기본 예제2 (0) | 2018.09.16 |
순환(Recursion)의 개념과 기본 예제1 (0) | 2018.09.16 |