Notice
Recent Posts
Recent Comments
Today
Total
05-22 02:00
Link
๊ด€๋ฆฌ ๋ฉ”๋‰ด

Partially Committed

[๋ฐฑ์ค€ 1213] ํŒฐ๋ฆฐ๋“œ๋กฌ ๋งŒ๋“ค๊ธฐ JAVA (๋ฌธ์ž์—ด, ๊ทธ๋ฆฌ๋””, ๊ตฌํ˜„) ๋ณธ๋ฌธ

๐Ÿ”ฅ Algorithm || ๋ฌธ์ œํ’€์ด/PS

[๋ฐฑ์ค€ 1213] ํŒฐ๋ฆฐ๋“œ๋กฌ ๋งŒ๋“ค๊ธฐ JAVA (๋ฌธ์ž์—ด, ๊ทธ๋ฆฌ๋””, ๊ตฌํ˜„)

WonderJay 2023. 6. 26. 13:01
728x90
๋ฐ˜์‘ํ˜•
SMALL

1213๋ฒˆ: ํŒฐ๋ฆฐ๋“œ๋กฌ ๋งŒ๋“ค๊ธฐ (acmicpc.net)

 

1213๋ฒˆ: ํŒฐ๋ฆฐ๋“œ๋กฌ ๋งŒ๋“ค๊ธฐ

์ฒซ์งธ ์ค„์— ๋ฌธ์ œ์˜ ์ •๋‹ต์„ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ ๋ถˆ๊ฐ€๋Šฅํ•  ๋•Œ๋Š” "I'm Sorry Hansoo"๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ์ •๋‹ต์ด ์—ฌ๋Ÿฌ ๊ฐœ์ผ ๊ฒฝ์šฐ์—๋Š” ์‚ฌ์ „์ˆœ์œผ๋กœ ์•ž์„œ๋Š” ๊ฒƒ์„ ์ถœ๋ ฅํ•œ๋‹ค.

www.acmicpc.net

๋ฌธ์ œ๋ฅผ ์š”์•ฝํ•ด๋ณด์ž.

 

์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด์ด ์ž…๋ ฅ์œผ๋กœ ๋“ค์–ด์˜จ๋‹ค.

    - ๊ทธ ๋ฌธ์ž์—ด๋กœ ํŒฐ๋ฆฐ๋“œ๋กฌ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋ฉด, ๊ฐ€์žฅ ์‚ฌ์ „์ˆœ์œผ๋กœ ์•ž์„œ๋Š” ํŒฐ๋ฆฐ๋“œ๋กฌ์„ ์ถœ๋ ฅํ•œ๋‹ค.

    - ๊ทธ ๋ฌธ์ž์—ด๋กœ ํŒฐ๋ฆฐ๋“œ๋กฌ์„ ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค๋ฉด, "I'm Sorry Hansoo" ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

์—ฌ๊ธฐ์„œ ํŒฐ๋ฆฐ๋“œ๋กฌ์ด๋ž€ ์•ž์—์„œ๋ถ€ํ„ฐ ์ฝ๋“ , ๋’ค์—์„œ๋ถ€ํ„ฐ ์ฝ๋“  ๋˜‘๊ฐ™์ด ์ฝํžˆ๋Š” ๋ฌธ์ž์—ด์„ ์˜๋ฏธํ•œ๋‹ค. (์˜ˆ์‹œ: ๐ŸŽ ํ† ๋งˆํ† )

 

๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋Š” ์ตœ๋Œ€ 50 ์ด๊ณ , ์‹œ๊ฐ„ ์ œํ•œ์€ 2์ดˆ์ด๋ฏ€๋กœ ๋„‰๋„‰ํ•˜๋‹ค.

 

๋ฌผ๋ก , ์ „์ฒด ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‹ค ๋”ฐ์ ธ๋ณด๋ฉด ์•ˆ๋œ๋‹ค. 

 

๊ธธ์ด๊ฐ€ n ์ธ ๋ฌธ์ž์—ด์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋Šฅํ•œ ๋ฌธ์ž์—ด์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒƒ์€ ์ˆœ์—ด์œผ๋กœ ์ ‘๊ทผ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(N!) ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  n ์˜ ์ตœ๋Œ€๋Š” 50 ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‹ค ๋”ฐ์ ธ๋ณด๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

 

๊ทธ๋Ÿฌ๋ฉด ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์ข‹์„๊นŒ?

 

2 ๊ฐ€์ง€ ํ’€์ด๊ฐ€ ์กด์žฌํ•  ๊ฒƒ ๊ฐ™๋‹ค.


์ผ๋‹จ, ์ƒ๊ฐํ•ด๋ณด๋ฉด ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด๋กœ ํŒฐ๋ฆฐ๋“œ๋กฌ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ์•„๋‹Œ์ง€๋Š”

 

๊ฐ๊ฐ์˜ ์•ŒํŒŒ๋ฒณ์˜ ๋นˆ๋„๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋‹จ๊ณ„์—์„œ

 

ํ™€์ˆ˜ ๊ฐœ์ธ ์•ŒํŒŒ๋ฒณ์ด ๋ช‡ ๊ฐœ ์ธ์ง€๊ฐ€ ์ค‘์š”ํ•˜๋‹ค.

 

ํ™€์ˆ˜ ๊ฐœ์ธ ์•ŒํŒŒ๋ฒณ์ด 1 ๊ฐœ๋ณด๋‹ค ๋งŽ๋‹ค๋ฉด, ๊ทธ ๋ฌธ์ž์—ด์œผ๋กœ๋Š” ์ ˆ๋Œ€๋กœ ํŒฐ๋ฆฐ๋“œ๋กฌ์„ ๋งŒ๋“ค์–ด๋‚ผ ์ˆ˜ ์—†๋‹ค.

 

"๊ฐ€์žฅ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์•ž์„  ์•ŒํŒŒ๋ฒณ์„ ๋จผ์ € ์‚ฌ์šฉํ•˜๊ธฐ"  ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด,

AABBZZC

๋ผ๋Š” ์ž…๋ ฅ์ด ์ฃผ์–ด์ง„๋‹ค๋ฉด

 

๋ฐฐ์—ด์ด๋‚˜ ํ•ด์‰ฌ๋งต ๋“ฑ์— ์•ŒํŒŒ๋ฒณ์˜ ๋นˆ๋„๋ฅผ ์ €์žฅํ•œ๋‹ค. 

A B Z C
2 2 2 1

๊ทธ๋ฆฌ๊ณ  ๊ฐ€์žฅ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์•ž์„œ๋„๋ก ํŒฐ๋ฆฐ๋“œ๋กฌ์„ ๋งŒ๋“ ๋‹ค.

 

์ด๋ฅผ ์œ„ํ•ด์„œ, ์œ„์™€ ๊ฐ™์ด ๋นˆ๋„๋ฅผ ์ €์žฅํ•œ ํ…Œ์ด๋ธ”์„

 

A B C Z
2 2 1 2

์™€ ๊ฐ™์ด ์‚ฌ์ „์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ์ƒํƒœ์—์„œ ์ƒ๊ฐํ•ด์•ผ ํ•œ๋‹ค.

 

(์‚ฌ์‹ค ์ด ๋ถ€๋ถ„์€ ๋ฐฐ์—ด๋กœ ๋นˆ๋„๋ฅผ ์ €์žฅํ•˜๋ฉด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ•ด๊ฒฐ๋˜๋Š” ๋ฌธ์ œ์ด๋‹ค.)

 

๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ A->B->C->Z ์ˆœ์œผ๋กœ ์ˆœํšŒํ•˜๋ฉด์„œ

 

๊ฐ๊ฐ์˜ ์•ŒํŒŒ๋ฒณ ๋นˆ๋„๊ฐ€ 2 ์ด์ƒ์ด๋ผ๋ฉด

 

Output ์˜ ์•ž ๋’ค์— ํ•ด๋‹น ๋ฌธ์ž๋ฅผ ๋„ฃ์–ด์ค€๋‹ค. 

 

์ด๋•Œ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์˜ˆ๋ฅผ ๋“ค์–ด A ์˜ ์•ŒํŒŒ๋ฒณ ๋นˆ๋„๊ฐ€ 7 ์ด๋ผ๋ฉด,

 

AAA____AAA  ์™€ ๊ฐ™์ด ํ•˜๋Š”๊ฒŒ ์ตœ์ ์ž„์— ์ฃผ์˜ํ•œ๋‹ค.

 

if ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด AB___BA ์ด๋Ÿฐ ์‹์œผ๋กœ ๋งŒ๋“ค์–ด ์งˆ ๊ฒƒ์ด๋‹ค.

 

์ด๋Ÿฐ์‹์œผ๋กœ ๋นˆ๋„ ํ…Œ์ด๋ธ”์„ 1 ํšŒ ์ˆœํšŒํ•˜๊ณ  ๋‚˜๋ฉด

 

output ๋ฌธ์ž์—ด์€ ABC_CBA ์™€ ๊ฐ™์„ ๊ฒƒ์ด๊ณ 

 

๋นˆ๋„ ํ…Œ์ด๋ธ”์€ ์•„๋ž˜์™€ ๊ฐ™์„ ๊ฒƒ์ด๋‹ค.

A B C Z
0 0 1 0

์ƒ๊ฐํ•ด๋ณด๋ฉด ์ด ์‹œ์ ์—์„œ์˜ ๋นˆ๋„ ํ…Œ์ด๋ธ”์€ ๊ฐ’์ด ํ•ญ์ƒ 0 ๋˜๋Š” 1 ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

์ด์ œ ๋‹ค์‹œ A->B->C->Z ์ˆœ์œผ๋กœ ์ˆœํšŒํ•˜๋ฉด์„œ

 

์ €์žฅ๋œ ๊ฐ’์ด 1 ์ด๋ฉด, ๋„ฃ์–ด์•ผ ํ•  ์ž๋ฆฌ์— ํ•ด๋‹น ๋ฌธ์ž์—ด์„ ๋„ฃ์–ด์ค€๋‹ค.

 

์œ„ ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉด

 

ํŒฐ๋ฆฐ๋“œ๋กฌ ๋ฌธ์ž์—ด์ด ๋งŒ๋“ค์–ด์ง„๋‹ค.

 

์ด์ œ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค!

 

์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        System.setIn(new FileInputStream("src/input.txt"));
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer stk;

        String input = br.readLine();
        int n = input.length();
        int[] f = new int[26];
        ArrayList<Character> list = new ArrayList<>();
        for (int i = 0; i < input.length(); i++) {
            f[input.charAt(i) - 'A']++;
            if (!list.contains(input.charAt(i))) {
                list.add(input.charAt(i));
            }
        }
        int odd = 0;
        for (int i = 0; i < 26; i++) {
            if (f[i] % 2 == 1) {
                odd++;
            }
        }
        if (odd > 1) {
            bw.write("I'm Sorry Hansoo");
        } else {
            list.sort(Character::compareTo);
            char[] output = new char[n];
            int left = 0;
            int right = input.length() - 1;
            for (int i = 0; i < list.size(); i++) {
                char nowChar = list.get(i);
                while (f[nowChar - 'A'] >= 2) {
                    output[left++] = nowChar;
                    output[right--] = nowChar;
                    f[nowChar - 'A'] -= 2;
                }
            }
            for (int i = 0; i < list.size(); i++) {
                char nowChar = list.get(i);
                if (f[nowChar - 'A'] > 0) {
                    output[left++] = nowChar;
                    f[nowChar - 'A']--;
                }
            }
            for (int i = 0; i < output.length; i++) {
                bw.write(output[i]);
            }
        }
        bw.flush();
        bw.close();
    }
}

 


๋‘ ๋ฒˆ์งธ ํ’€์ด๋Š” ๋ณด๋‹ค ๊ตฌํ˜„์ด ๊ฐ„๋‹จํ•˜๋‹ค.

 

ํŒฐ๋ฆฐ๋“œ๋กฌ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋Š” ์ฒซ ๋ฒˆ์งธ ํ’€์ด์™€ ๋™์ผํ•˜๋‹ค.

 

ํŒฐ๋ฆฐ๋“œ๋กฌ์„ ๋งŒ๋“œ๋Š” ๊ณผ์ •์ด ์กฐ๊ธˆ ๋‹ค๋ฅด๋‹ค.

 

ํŒฐ๋ฆฐ๋“œ๋กฌ ๋ฌธ์ž์—ด์˜ ๊ตฌ์„ฑ์„ front + mid + end ๋‹จ์œ„๋กœ ์ชผ๊ฐœ์„œ ์ƒ๊ฐํ•˜์ž.

 

์˜ˆ๋ฅผ ๋“ค์–ด, AABBZ ๋ผ๋Š” ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์ง€๋ฉด

 

front ๋Š” AB

 

mid ๋Š” Z

 

end ๋Š” BA ๊ฐ€ ๋˜์•ผ ํ•  ๊ฒƒ์ด๋‹ค.

 

์ตœ์ข…์ ์ธ ํŒฐ๋ฆฐ๋“œ๋กฌ์€ front + mid + end ์ด๋‹ค.

 

end ๋Š” front ๋ฅผ reverse ํ•ด์„œ ์–ป์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, front ์™€ mid ๋งŒ ๊ตฌํ•ด๋‚ด๋ฉด ๋œ๋‹ค.

 

๊ฐ„๋‹จํ•˜๋‹ค.

 

์ผ๋‹จ ๋นˆ๋„๋ฅผ ์ €์žฅํ•œ ํ…Œ์ด๋ธ”์„ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์ˆœํšŒํ•œ๋‹ค.

 

ํ˜„์žฌ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๋Š” ๋ฌธ์ž์˜ ๋นˆ๋„์˜ 1/2 ๋งŒํผ front ์— append ํ•œ๋‹ค.

 

๊ทธ๋Ÿฌ๋ฉด front ๋ฌธ์ž์—ด์€ ์™„์„ฑ๋œ๋‹ค.

 

mid ๋ฌธ์ž์—ด์€

 

ํ˜„์žฌ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๋Š” ๋ฌธ์ž์˜ ๋นˆ๋„๊ฐ€ ํ™€์ˆ˜์ด๋ฉด mid ์— append ํ•˜์—ฌ ๋งŒ๋“ค์–ด ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

 

end ๋ฌธ์ž์—ด์€ front ๋ฌธ์ž์—ด์„ ๋’ค์ง‘์œผ๋ฉด ๋œ๋‹ค.

 

์œ„ ๊ณผ์ •์„ ๊ฑฐ์นœ ํ›„,

 

front + mid + end ๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค!

 

์ด๋ ‡๊ฒŒ ์ชผ๊ฐœ์„œ ์ƒ๊ฐํ•˜๋Š” ๊ด€์ ์ด ๊ตฌํ˜„์ด ๋” ๊ฐ„๋‹จํ•˜๋‹ค. ๐Ÿ˜Š

 

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        System.setIn(new FileInputStream("src/input.txt"));
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer stk;

        String input = br.readLine();
        int n = input.length();
        int[] f = new int[26];
        for (int i = 0; i < n; i++) {
            f[input.charAt(i) - 'A']++;
        }
        int odd = 0;
        for (int i = 0; i < 26; i++) {
            if (f[i] % 2 == 1) {
                odd++;
            }
        }
        if (odd > 1) {
            bw.write("I'm Sorry Hansoo");
        } else {
            StringBuilder front = new StringBuilder();
            StringBuilder mid = new StringBuilder();
            for (int i = 0; i < 26; i++) {
                for (int j = 0; j < f[i] / 2; j++) {
                    front.append((char) ('A' + i));
                }
            }
            for(int i = 0 ; i< 26 ; i++){
                if(f[i]%2==1){
                    mid.append((char) ('A' + i));
                }
            }
            String output = front.toString() + mid.toString() + front.reverse();
            bw.write(output);
        }

        bw.flush();
        bw.close();
    }
}
728x90
๋ฐ˜์‘ํ˜•
LIST
Comments