https://www.acmicpc.net/problem/1213
1213번: 팰린드롬 만들기
첫째 줄에 문제의 정답을 출력한다. 만약 불가능할 때는 "I'm Sorry Hansoo"를 출력한다. 정답이 여러 개일 경우에는 사전순으로 앞서는 것을 출력한다.
www.acmicpc.net
위 문제는 앞으로 읽어도 뒤로 읽어도 똑같은 팰린드롬이라는 문자열에 관한 문제이다.
AAABB 라는 문자열을 입력받았을 때 "ABABA" 로 출력되도록 해야하며
AZ 나 ABCD 처럼 팰린드롬으로 만들어지지 않는 문자열은 "I'm Sorry Hansoo" 라는 문자열을 출력해야한다.
이 문제는 알파벳의 개수를 저장할 배열과 그 배열에서 입력받은 알파벳 개수 즉 num 이라는 변수와
그 배열에서 홀수인 알파벳의 개수 즉 odd 변수를 이용한다.
ex) AAABB 라는 문자열을 입력받으면
alpha[] 배열에는 3 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 순서로 저장되게 된다.
이 때 num 은 2 이고 odd 는 1이다.
근데 여기서 odd가 1보다 크면 즉 AZ 나 ABCD 이면 "I'm Sorry Hansoo" 라는 문자열을 출력해야한다.
그리고 최종적으로 팰린드롬 문자열을 출력하기 위해서는 다음 코드들의 과정을 거쳐야한다.
for(int i=0;i<26;i++){
for(int j=0;j<alpha[i]/2;j++)
sb.append((char)(i+'A'));
}
위 코드는 만약 AAABB 라는 문자열의 경우 AB 라는 문자열을 sb 에 추가하게 된다.
for(int i=0;i<26;i++){
if(alpha[i]%2==1){
sb.append((char)(i+'A'));
}
}
위 코드는 홀수인 알파벳을 가운데에 출력하기 위해 하는 작업으로 AAABB 라는 문자열의 경우 A 라는 문자열을 sb 에추가하게 된다.
ans += sb.reverse().toString();
위 코드는 첫 번째 과정에서 AB 라는 문자열을 거꾸로하여 BA 로 추가하는 코드이다.
▶코드
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));
StringBuilder sb = new StringBuilder();
String s = br.readLine();
String ans = "";
int alpha[] = new int[26];
int num=0, odd=0;
for(int i=0;i<s.length();i++){
alpha[s.charAt(i)-'A'] ++;
}
for(int i=0;i<26;i++){
if(alpha[i]>0){
num++;
}
if(alpha[i]%2==1){
odd++;
}
}
if(odd>1){
System.out.println("I'm Sorry Hansoo");
}
else{
for(int i=0;i<26;i++){
for(int j=0;j<alpha[i]/2;j++)
sb.append((char)(i+'A'));
}
ans = sb.toString();
for(int i=0;i<26;i++){
if(alpha[i]%2==1){
sb.append((char)(i+'A'));
}
}
ans += sb.reverse().toString();
System.out.print(ans);
}
}
}
'알고리즘 > 백준 풀이(그리디)' 카테고리의 다른 글
백준 1931번 - 회의실 배정 (0) | 2024.02.24 |
---|---|
백준 1417번 - 국회의원 선거 (0) | 2024.02.19 |
백준 1105번 - 팔 (0) | 2024.02.03 |
백준 11501번 - 주식 (1) | 2024.02.03 |
백준 2847번 - 게임을 만든 동준이 (1) | 2024.02.03 |