๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 1213_ํŒฐ๋ฆฐ๋“œ๋กฌ ๋งŒ๋“ค๊ธฐ

๋ฟŒ์•ผ._. 2023. 9. 15. 11:29

Silver III

๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/1213)

< ํŒฐ๋ฆฐ๋“œ๋กฌ ๋งŒ๋“ค๊ธฐ >

 

๋ฌธ์ œ ํ’€์ด 

 

ํŒฐ๋ฆฐ๋“œ๋กฌ์ด ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์—์„œ ๊ฐ ์•ŒํŒŒ๋ฒณ ๊ฐœ์ˆ˜๋ฅผ ์„ผ๋‹ค.

์ง์ˆ˜์ผ ๋•Œ ๊ฐ ์•ŒํŒŒ๋ฒณ์ด ํ™€์ˆ˜๊ฐœ๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ๋‹ค๋ฉด ํŒฐ๋ฆฐ๋“œ๋กฌ์„ ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค. ๋˜ํ•œ, ํ™€์ˆ˜์ผ ๋•Œ ๊ฐ ์•ŒํŒŒ๋ฒณ์ด ํ™€์ˆ˜๊ฐœ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ๋‹ค๋ฉด ํŒฐ๋ฆฐ๋“œ๋กฌ์„ ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค. ์ด ์กฐ๊ฑด์„ ๋จผ์ € ํ™•์ธํ•ด ์ค€๋‹ค. 

์œ„์˜ ์กฐ๊ฑด์„ ํ†ต๊ณผํ•˜๋ฉด ํŒฐ๋ฆฐ๋“œ๋กฌ์„ ๋งŒ๋“ค์–ด์ค€๋‹ค.

 

 

 my solution (Java)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;

public class _1213_ { // ํŒฐ๋ฆฐ๋“œ๋กฌ ๋งŒ๋“ค๊ธฐ

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));

		String str = bf.readLine();

		HashMap<Character, Integer> map = new HashMap<>();
		ArrayList<Character> list = new ArrayList<>();

		for (int i = 0; i < str.length(); i++) {
			char x = str.charAt(i);
			if (!map.containsKey(x)) {
				map.put(x, 1);
				list.add(x);
			} else {
				map.replace(x, map.get(x) + 1);
			}
		}

		Collections.sort(list);

		boolean flag = false;
		char a = ' ';
		boolean result = false;
		for (char x : map.keySet()) {
			if (map.get(x) % 2 != 0) {
				if (!flag) {
					flag = true;
					a = x;
				} else {
					result = true;
					break;
				}
			}
		}

		if (str.length() % 2 == 0 && flag) {
			result = true;
		}

		String answer = "";

		if (!result) {
			char arr[] = new char[str.length()];
			int front = 0, back = str.length() - 1;

			for (char x : list) {
				while (map.get(x) > 1) {
					arr[front++] = x;
					arr[back--] = x;
					map.replace(x, map.get(x) - 2);
				}
			}
			if(str.length()%2!=0) {
				arr[front] = a;
			}

			for (char x : arr) {
				answer += x;
			}
		}

		if (result) {
			System.out.println("I'm Sorry Hansoo");
		} else {
			System.out.println(answer);
		}
	}
}

 

Main

๋ณ€์ˆ˜)
str : ์˜์–ด ์ด๋ฆ„
map : ๊ฐ ์•ŒํŒŒ๋ฒณ ๊ฐœ์ˆ˜
list : ์กด์žฌํ•˜๋Š” ์•ŒํŒŒ๋ฒณ
flag : ํ™€์ˆ˜๊ฐœ์˜ ์•ŒํŒŒ๋ฒณ์ด ์žˆ๋Š”์ง€ ์—ฌ๋ถ€
a : ํ™€์ˆ˜๊ฐœ ์•ŒํŒŒ๋ฒณ
result : ํ™€์ˆ˜๊ฐœ์˜ ์•ŒํŒŒ๋ฒณ์ด 2๊ฐœ ์ด์ƒ์ธ์ง€ ์—ฌ๋ถ€
answer : ์ •๋‹ต
arr : ํŒฐ๋ฆฐ๋“œ๋กฌ ์ •๋‹ต ๋ฐฐ์—ด
front, back : arr ๋ฐฐ์—ด index

 

- ์˜์–ด ์ด๋ฆ„(str) ์ž…๋ ฅ

- ์ž…๋ ฅ๋ฐ›์€ ๋ฌธ์ž์—ด(str)์— ํฌํ•จ๋œ ์•ŒํŒŒ๋ฒณ ๊ฐœ์ˆ˜ ์„ธ๊ธฐ

- ๋ฌธ์ž์—ด(str)์— ํฌํ•จ๋œ ์•ŒํŒŒ๋ฒณ์„ ์‚ฌ์ „์ˆœ์œผ๋กœ ์ •๋ ฌ

- ์•ŒํŒŒ๋ฒณ ๊ฐœ์ˆ˜ ์„ผ map์„ ์ˆœํ™˜ํ•˜๋ฉด์„œ ํ™€์ˆ˜๊ฐœ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ

: ํ™€์ˆ˜๊ฐœ๊ฐ€ ํ•˜๋‚˜ ์žˆ๋‹ค๋ฉด ๊ทธ ๊ฐ’๋„ ์ €์žฅ(a)

: ํ™€์ˆ˜๊ฐœ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ๋ผ๋ฉด ๋ฌธ์ž์—ด์˜ ๊ธธ์ด์™€ ์ƒ๊ด€์—†์ด ํŒฐ๋ฆฐ๋“œ๋กฌ์„ ๋งŒ๋“ค ์ˆ˜ ์—†์Œ

- ๋ฌธ์ž์—ด(str)์˜ ๊ธธ์ด๊ฐ€ ์ง์ˆ˜์ด๊ณ  ํ™€์ˆ˜๊ฐœ์ธ ์•ŒํŒŒ๋ฒณ์ด ์žˆ๋‹ค๋ฉด ํŒฐ๋ฆฐ๋“œ๋กฌ์„ ๋งŒ๋“ค ์ˆ˜ ์—†์Œ

- ํŒฐ๋ฆฐ๋“œ๋กฌ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์กฐ๊ฑด์ด๋ผ๋ฉด(result)

: ์œ„์—์„œ ์•ŒํŒŒ๋ฒณ ์‚ฌ์ „์ˆœ์œผ๋กœ ์ •๋ ฌ(list) ํ•œ ๊ฐ’์„ ์ˆœ์„œ๋Œ€๋กœ ํ™•์ธํ•˜๋ฉด์„œ ์•ž ๋’ค๋กœ ๊ฐ’ ์ฑ„์šฐ๊ธฐ

: ์ž…๋ ฅ๋ฐ›์€ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ ํ™€์ˆ˜๋ผ๋ฉด ์œ„์—์„œ ์ €์žฅํ•ด ๋‘” ๊ฐ’(a)์„ ๊ฐ€์šด๋ฐ์— ์ฑ„์šฐ๊ธฐ

: ๋ฐฐ์—ด -> ๋ฌธ์ž์—ด ๋ณ€ํ™˜

- result ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋ถˆ๊ฐ€๋Šฅ ๋ฌธ์ž์—ด ์ถœ๋ ฅ or ํŒฐ๋ฆฐ๋“œ๋กฌ ์ถœ๋ ฅ