728x90
https://www.acmicpc.net/problem/1213
뒤집은 값을 넣어야할 곳이 있어야 하기 때문에 StringBuilder 를 2개 사용했다.
StringBuilder sb = new StringBuilder();
StringBuilder sb2 = new StringBuilder();
입력받은 값을 배열에 담아주었다. 담아줄때는 알파벳이 몇개 들어가있는지 인덱스 값에 넣어준다.
for (int i = 0; i < str.length(); i++) {
int n = str.charAt(i) - 'A';
arr[n]++;
}
알파벳 개수가 홀수인경우를 세어주어야 한다.
2개 이상일 경우, 팰린드롬이 될수없다.
따라서 배열을 순회하면서 홀수인경우를 세어주고 2개 이상이면 바로 실행을 종료시킨다.
int count = 0;
for (int i = 0; i < arr.length; i++) {
if(arr[i] % 2 == 1) {
count ++;
}
}
if ( count > 1 ) {
System.out.println("I'm Sorry Hansoo");
return;
}
먼저 가운데 왼쪽값(뒤집기전)까지의 값을 sb에 넣어준다.
넣어줄 값은 arr[i] 가 1 이상이어야 하며, 짝수값만 들어가 있으니, /2 를 통해서 반만 sb에 넣어준다
ex ) arr[0] = 4 이면 4/2 는 2이므로, sb 에는 AA
for (int i = 0; i < arr.length; i++) {
if (arr[i] > 0) {
for (int j = 0; j < arr[i]/2; j++) {
sb.append((char)(i +'A'));
}
}
}
위에서 sb 값에 넣어주는 것을 완료하고, 이후에 홀수값이 있을경우 해당 값을 넣어준다.
for (int i = 0; i < arr.length; i++) {
if ( arr[i] % 2 == 1) {
sb.append((char)(i +'A'));
}
}
뒤집을 값을 넣을 차례이다.
배열의 뒤에서부터 순회하면 되고, 넣는 조건은 위와 같다.
for (int i = arr.length-1; i >= 0 ; i--) {
if ( arr[i] > 1 ) {
for (int j = 0; j < arr[i]/2; j++) {
sb2.append((char)(i+'A'));
}
}
}
sb에 뒤집은 sb2 의 값을 붙여준다.
sb.append(sb2);
package BEAKJOON.silver;
/**
* 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율
* 2 초 128 MB 13095 5218 4232 39.474%
*/
import java.util.Scanner;
public class _1213 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
StringBuilder sb = new StringBuilder();
StringBuilder sb2 = new StringBuilder();
int [] arr = new int [26];
for (int i = 0; i < str.length(); i++) {
int n = str.charAt(i) - 'A';
arr[n]++;
}
//System.out.println(Arrays.toString(arr));
int count = 0;
for (int i = 0; i < arr.length; i++) {
if(arr[i] % 2 == 1) {
count ++;
}
}
if ( count > 1 ) {
System.out.println("I'm Sorry Hansoo");
return;
}
for (int i = 0; i < arr.length; i++) {
if (arr[i] > 0) {
for (int j = 0; j < arr[i]/2; j++) {
sb.append((char)(i +'A'));
}
}
}
for (int i = 0; i < arr.length; i++) {
if ( arr[i] % 2 == 1) {
sb.append((char)(i +'A'));
}
}
//System.out.println(sb);
for (int i = arr.length-1; i >= 0 ; i--) {
if ( arr[i] > 1 ) {
for (int j = 0; j < arr[i]/2; j++) {
sb2.append((char)(i+'A'));
}
}
}
sb.append(sb2);
System.out.println(sb);
}
}
728x90
'Algorithm & SQL > BAEKJOON' 카테고리의 다른 글
백준 JAVA 1629 곱셈 (0) | 2022.09.09 |
---|---|
백준 JAVA 3986 좋은 단어 (0) | 2022.09.09 |
백준 JAVA 3085 사탕 게임 (0) | 2022.09.06 |
백준 JAVA 2979 트럭 주차 (0) | 2022.09.05 |
백준 JAVA 1940 주몽 (0) | 2022.09.02 |
댓글