๋šœ๋ถ€๋‹ˆ์˜ Devlog

[BOJ] 1759.์•”ํ˜ธ๋งŒ๋“ค๊ธฐ (Java)

by ๋šœ๋ถ€๋‹ˆ

 

 

1759๋ฒˆ: ์•”ํ˜ธ ๋งŒ๋“ค๊ธฐ

์ฒซ์งธ ์ค„์— ๋‘ ์ •์ˆ˜ L, C๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (3 ≤ L ≤ C ≤ 15) ๋‹ค์Œ ์ค„์—๋Š” C๊ฐœ์˜ ๋ฌธ์ž๋“ค์ด ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ฃผ์–ด์ง„๋‹ค. ์ฃผ์–ด์ง€๋Š” ๋ฌธ์ž๋“ค์€ ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž์ด๋ฉฐ, ์ค‘๋ณต๋˜๋Š” ๊ฒƒ์€ ์—†๋‹ค.

www.acmicpc.net

์ด ๋ฌธ์ œ๋Š” ์ฃผ์–ด์ง„ C๊ฐœ์˜ ๋ฌธ์ž๋ฅผ L ๊ธธ์ด์˜ ์•”ํ˜ธ๋กœ ๋งŒ๋“œ๋Š” ๋ฌธ์ œ์ด๋ฉฐ,

์•”ํ˜ธ๋Š” ์ตœ์†Œ ํ•œ ๊ฐœ์˜ ๋ชจ์Œ๊ณผ ์ตœ์†Œ ๋‘ ๊ฐœ์˜ ์ž์Œ์„ ํฌํ•จํ•œ ์ •๋ ฌ๋œ ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

๋ธŒ๋ฃจํŠธํฌ์Šค๋ฅผ ์ด์šฉํ•ด์„œ ํ’€๋ฉด ๋˜๋Š” ๋ฌธ์ œ๋ผ ํŽธ์•ˆํ•œ ๋งˆ์Œ์œผ๋กœ ํ’€์—ˆ๋„ค์š” ๐Ÿ˜Ž๐Ÿ˜Ž

 

import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;

class Main {
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    static int L;
    static int C;
    static char[] alpha;
    static boolean[] visited;

    static void printPassowrd() throws Exception {
        String answer = "";
        for (int i = 0; i < C; i++)
            if (visited[i])
                answer += alpha[i];
        System.out.println(answer);
    }

    /** checkVowel
     *
     * @param alpha ํ™•์ธํ•˜๋ ค๋Š” ๋ฌธ์ž
     * @return ๋ชจ์Œ์ธ์ง€ ํ™•์ธ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜
     */
    static boolean checkVowel(char alpha) {
        if (alpha == 'a' || alpha == 'e' || alpha == 'i' || alpha == 'o' || alpha == 'u')
            return true;
        else
            return false;
    }

    /** createPassword
     *
     * @param len ์•”ํ˜ธ ๊ธธ์ด
     * @param idx for๋ฌธ ์‹œ์ž‘ํ•  idx ๋ฒˆํ˜ธ
     * @param vowel ๋ชจ์Œ ์ˆ˜
     * @param consonants ์ž์Œ ์ˆ˜
     */
    static void createPassword(int len, int idx, int vowel, int consonants) throws Exception {
        // ์กฐ๊ฑด ๋งŒ์กฑ ์‹œ ์ถœ๋ ฅ
        if (len == L) {
            if (vowel < 1 || consonants < 2) // ์กฐ๊ฑด์— ํ•ด๋‹นํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋ฐ˜ํ™˜
                return;
            printPassowrd();
            return;
        }

        for (int i = idx; i < C; i++) {
            if (!visited[i]) {
                visited[i] = true; // ๋ฐฉ๋ฌธํ•œ ์•ŒํŒŒ๋ฒณ ๋ฒˆํ˜ธ
                if (checkVowel(alpha[i]))
                    createPassword(len + 1, i + 1, vowel + 1, consonants);
                else
                    createPassword(len + 1, i + 1, vowel, consonants + 1);
                visited[i] = false; // ๋ฐฉ๋ฌธ ํ‘œ์‹œ ์ œ๊ฑฐ
            }
        }
    }

    public static void main(String[] args) throws Exception {

        StringTokenizer st = new StringTokenizer(br.readLine());
        L = Integer.parseInt(st.nextToken());
        C = Integer.parseInt(st.nextToken());
        alpha = new char[C]; // ์ž…๋ ฅ ๋ฐ›์€ ๋ฌธ์ž ์ €์žฅ
        visited = new boolean[C]; // ๋ฐฉ๋ฌธ ์—ฌ๋ถ€ ํ‘œ์‹œ

        st = new StringTokenizer(br.readLine());
        for (int i = 0; i < C; i++)
            alpha[i] = st.nextToken().charAt(0); // ํ•œ๊ธ€์ž์”ฉ ๋ฐ›์•„์™€์„œ char๋กœ ๋ณ€๊ฒฝ

        Arrays.sort(alpha); // ์‚ฌ์ „์ˆœ์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด sort ์‹œํ‚ด
        createPassword(0, 0, 0, 0);

        br.close();
    }
}

 

 

'Algorithm > BOJ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[BOJ] 2016.๋ฏธํŒ…์ฃผ์„ ํ•˜๊ธฐ  (0) 2022.06.13
[BOJ] 2615.์˜ค๋ชฉ (Java)  (0) 2022.04.21
[BOJ] 12094.A์™€ B (Java)  (0) 2021.06.10
[BOJ] 10159.์ €์šธ (Java)  (0) 2021.05.02
[BOJ] 1043.๊ฑฐ์ง“๋ง (Java)  (0) 2021.04.30

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

๋šœ๋ถ€๋‹ˆ์˜ Devlog

๋šœ๋ถ€๋‹ˆ

ํ™œ๋™ํ•˜๊ธฐ