본문 바로가기
Algorithm & SQL/BAEKJOON

백준 JAVA 1213 팰린드롬 만들기

by YoonJong 2022. 9. 8.
728x90

https://www.acmicpc.net/problem/1213

 

1213번: 팰린드롬 만들기

첫째 줄에 문제의 정답을 출력한다. 만약 불가능할 때는 "I'm Sorry Hansoo"를 출력한다. 정답이 여러 개일 경우에는 사전순으로 앞서는 것을 출력한다.

www.acmicpc.net

 

 

뒤집은 값을 넣어야할 곳이 있어야 하기 때문에 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

댓글