Algorithm

[BOJ_1759]์•”ํ˜ธ ๋งŒ๋“ค๊ธฐ (๊ณจ๋“œ 5) - JAVA

์ด์ˆ˜๋ฐˆ 2023. 12. 7. 15:23


๐Ÿพ ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • ์กฐํ•ฉ๋ก ๊ณผ ๋ฐฑํŠธ๋ž˜ํ‚น์„ ์ ์ ˆํžˆ ํ•ฉ์ณ ์ƒ๊ฐํ•˜๋ฉด ํ’€๋ฆฌ๋Š”๋ฌธ์ œ๋‹ค.

๐Ÿพ ์ƒ๊ฐ ํฌ์ธํŠธ

  • ์ถœ๋ ฅํ˜•์‹์ด ์ž˜๋ชป๋˜์—ˆ๋‹ค๋Š” ์˜ค๋ฅ˜๋•Œ๋ฌธ์— ํ•œ์ฐธ์„ ๊ณ ๋ฏผํ–ˆ๋‹ค. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์Šคํ„ฐ๋””์› ๋•๋ถ„์— ํ•ด๊ฒฐ์™„๋ฃŒ!! 
  • ์›๋ž˜๋Š” printํ•จ์ˆ˜๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ–ˆ์—ˆ๋‹ค.

private static void print(String[] arr, boolean[] visited) {
        StringBuilder result = new StringBuilder();
        for (int i = 0; i < arr.length; i++) {
            if (visited[i] && check(arr, visited)) {
                result.append(arr[i]);
            }
        }
        result.append("\n");
        System.out.print(result);
    }

 

์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•˜๋ฉด, ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‹ค๋Œ๋ฉด์„œ ์กฐ๊ฑด์— ๋งž์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋Š” ์ถœ๋ ฅ์„ ํ•˜์ง€ ์•Š๊ณ , ์ค„๋ฐ”๊ฟˆ๋งŒ ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์ž์Œ2๊ฐœ ์ด์ƒ, ๋ชจ์Œ 1๊ฐœ์ด์ƒ์ด ์žˆ์–ด์•ผ ํ•˜๋Š” ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜์ง€ ๋ชปํ•˜๋ฉด ๊ณต๋ฐฑ์ด ์ƒ๊ธฐ๊ณ  ์ด๋กœ ์ธํ•ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋˜ ๊ฒƒ์ด๋‹ค. ใ… ใ… 

๊ทธ๋ž˜์„œ ์•„๋ž˜ ์†Œ์Šค์ฝ”๋“œ์™€ ๊ฐ™์ด ์กฐ๊ฑด์— ์ถฉ์กฑ๋˜์ง€ ์•Š์œผ๋ฉด return ์‹œํ‚ค๊ธฐ! ์ด ๋˜ํ•œ ๋ฐฑํŠธ๋ž˜ํ‚น์˜ ์›๋ฆฌ๋ฅผ ํ™œ์šฉํ•ด ์ถœ๋ ฅํ•˜๋Š” ๊ฑฐ์˜€๋˜ ๊ฒƒ์ด๋‹ค........  ์—ด์‹ฌํžˆ ์ƒ๊ฐํ•ด์•ผ๊ฒ ๋‹ค.


๐Ÿพ ์†Œ์Šค์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main_1759 {
	static int L;
	static int C;

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		L = Integer.parseInt(st.nextToken());
		C = Integer.parseInt(st.nextToken());
		st = new StringTokenizer(br.readLine());
		String[] arr = new String[C];
		boolean[] visited;
		for (int i = 0; i < C; i++) {
			arr[i] = st.nextToken();
		}
		Arrays.sort(arr);
		// 6๊ฐœ์ค‘์— 4๊ฐœ๋ฝ‘๊ธฐ
		combination(arr, new boolean[C], 0, 0, L);

	}

	private static void combination(String[] arr, boolean[] visited, int start, int depth, int r) {
		// ๊ธฐ์ €์กฐ๊ฑด
		if (depth == L) {
			print(arr, visited);
			return;
		}

		// ์žฌ๊ท€์กฐ๊ฑด
		for (int i = start; i < arr.length; i++) {
			if (!visited[i]) {
				visited[i] = true;
				combination(arr, visited, i + 1, depth + 1, r);
				visited[i] = false;
			}
		}

	}

	private static void print(String[] arr, boolean[] visited) {
        StringBuilder result = new StringBuilder();

        if (check(arr, visited)) {
        	//check ํ•จ์ˆ˜๊ฐ€ true : ์ž์Œ๋ชจ์Œ๊ฐœ์ˆ˜ ์ถฉ์กฑ๋˜๋ฉด ์ถœ๋ ฅ
            for (int i = 0; i < visited.length; i++) {
                if (visited[i]) {
                    result.append(arr[i]);
                }
            }
        } else {
        	//์ž์Œ๋ชจ์Œ๊ฐœ์ˆ˜๊ฐ€ ์ถฉ์กฑ๋˜์ง€ ๋ชปํ•˜๋ฉด ์ถœ๋ ฅ ๋ถˆ๊ฐ€๋Šฅ 
        	//์•„์˜ˆ ์กฐ๊ฑด์— ๋งž์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌํ„ด์‹œํ‚ค๊ธฐ..!
            return;
        }

        result.append("\n");
        System.out.print(result);

    }

	private static boolean check(String[] arr, boolean[] visited) {
		int cnt = 0;
		int cnt2 = 0;
		for (int i = 0; i < arr.length; i++) {
			if (visited[i]) {
				if (arr[i].contains("a") || arr[i].contains("i") || arr[i].contains("e") || arr[i].contains("u")
						|| arr[i].contains("o")) {
					cnt++;
				}else {
					cnt2++;
				}
			}

		}
		if (cnt >= 1 && cnt2>=2) {
			return true;
		}
		return false;
	}

}

๐Ÿ˜ต‍๐Ÿ’ซ ๊ณต๋ถ€ํ•ด์•ผ ํ•  ์ 

  • ์ง„๋“ํ•˜๊ฒŒ ์ƒ๊ฐํ•˜๊ธฐ..
  • ์•ˆ๋˜๋ฉด ๋๊นŒ์ง€ ์žก๊ณ  ํ•ด๊ฒฐํ•˜๊ธฐ,,
  • ๋ฐ”๋กœ ๋ฌผ์–ด๋ณด์ง€ ์•Š๊ธฐ