白準1213ファリンdromの作成(実装)
3641 ワード
これは解決するのに長い時間がかかる問題です.2週間前からほぼ3~4回挑戦しましたが、実施力不足のためか、かなり時間がかかりました.
まず考える方法は正しい.
指定された文字列の長さが偶数の場合、偶数文字が必要です.例えば、AABBCDの場合、Aは2個、Bは2個、Cは1個、Dは1個なのでダメです.対称なので奇数個ではありません.
指定された文字列の長さが奇数の場合、奇数の文字は1文字のみ許可されます.例えば、ABCABの場合、Aは2個、Bは2個、Cは1個であるため、パリン症候群を作成することができる.しかし、ABCACCであれば不可能です.
また,重要な部分は,複数の正解があれば辞書順に前の回答を出力することである.例えば、ABAABAがあれば、答えはAABBAAであるべきです.そのため、前の文字を先に処理する必要があります.この言葉は次のコードと同じです.
まず考える方法は正しい.
指定された文字列の長さが偶数の場合、偶数文字が必要です.例えば、AABBCDの場合、Aは2個、Bは2個、Cは1個、Dは1個なのでダメです.対称なので奇数個ではありません.
指定された文字列の長さが奇数の場合、奇数の文字は1文字のみ許可されます.例えば、ABCABの場合、Aは2個、Bは2個、Cは1個であるため、パリン症候群を作成することができる.しかし、ABCACCであれば不可能です.
また,重要な部分は,複数の正解があれば辞書順に前の回答を出力することである.例えば、ABAABAがあれば、答えはAABBAAであるべきです.そのため、前の文字を先に処理する必要があります.この言葉は次のコードと同じです.
for(int i=0; i<alpha.length; i++){ //사전 순으로 앞서려면 아스키 코드가 빠른 순서부터 우선적으로 처리
for(int j=0; j<alpha[i]/2; j++){
output += (char)(i + 'A');
}
}
すべてのコードimport java.util.*;
public class Main {
static String output = "";
static String s;
static String add_String(String k){
String n = "";
for(int i=k.length()-1; i>=0; i--){
n += k.charAt(i);
}
return n;
}
public static void main (String[]args){
Scanner scanner = new Scanner(System.in);
s = scanner.next(); //홀수개 글자면 하나만 홀수 나머지 짝수.. 짝수개 글자면 모든게 짝수..
int[] alpha = new int[26];
for(int i=0; i<s.length(); i++){
alpha[s.charAt(i) - 'A']++;
}
int center = 0;
int cnt = 0;
for(int i=0; i<alpha.length; i++){
if(alpha[i] % 2 != 0){
cnt++;
center = i;
}
}
if(cnt >= 2 || (s.length() % 2 == 0 && cnt >= 1))
System.out.print("I'm Sorry Hansoo");
else {
for(int i=0; i<alpha.length; i++){ //사전 순으로 앞서려면 아스키 코드가 빠른 순서부터 우선적으로 처리
for(int j=0; j<alpha[i]/2; j++){
output += (char)(i + 'A');
}
}
if(s.length() % 2 != 0){
String k = output;
output += (char)(center + 'A') + add_String(k);
System.out.print(output);
}
else {
System.out.print(output + add_String(output));
}
}
}
}
奇数文字であれば、真ん中の字を付けて逆さにします.Reference
この問題について(白準1213ファリンdromの作成(実装)), 我々は、より多くの情報をここで見つけました https://velog.io/@dydgjs2016/백준-1213-팰린드롬-만들기구현テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol