peacekim
할 수 있는 것과 할 수 없는 것.
peacekim
전체 방문자
오늘
어제
  • 분류 전체보기 (68)
    • 👨‍🏫ps (44)
      • ❄️프로그래머스 (20)
      • 🔟0️⃣백준 (21)
      • leetcode (3)
    • ✍🏻study (20)
      • 👐java (6)
      • 🍃spring (1)
      • 🥇algorithm (0)
      • 🚘oodp (4)
      • 📒 jpa (3)
      • 👣DB (2)
      • 🌂네트워크 (0)
      • 🎸기타 (3)
      • 👊 kotlin (1)
      • 🫥 jvm (0)
    • 📽project (4)
      • 🎀ReBoN (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
peacekim

할 수 있는 것과 할 수 없는 것.

[백준] 1759번 암호 만들기 풀어보기 [Java]
👨‍🏫ps/🔟0️⃣백준

[백준] 1759번 암호 만들기 풀어보기 [Java]

2022. 3. 4. 00:55
반응형

조합 문제였다. 암호 조합들은 알파벳 순으로 출력을 해야된다. 암호는 모음이 최소 한개, 자음이 최소 두개로 구성되어야 했다.

 

👨‍🏫  풀이

들어온 알파벳들을 오름차순으로 정렬을 해주었다.

그리고 조합을 돌렸다.

모음은 1개 이상, 암호의 길이 - 2 이하이여만 했다. 그래서 해당 조건을 만족하는 암호를 출력하도록 했다.

알파벳을 오름차순으로 정렬을 해놓고, 조합을 돌렸기 때문에 암호들이 알파벳 순으로 출력되도록 풀 수 있다.

 

👨🏻‍💻 코드 

package 번1759;

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

public class Main {
    static int minM, maxM;
    static String[] alphabets;
    static String[] vowels = {"a", "e", "i", "o", "u"};
    static int L, C;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int[] input = Arrays.stream(br.readLine().split(" ")).mapToInt(i -> Integer.parseInt(i)).toArray();
        L = input[0]; C = input[1];
        minM = 1; maxM = L - 2;
        alphabets = br.readLine().split(" ");
        Arrays.sort(alphabets);
        dfs(0, 0, new Stack<String>());
    }

    static void dfs(int idx, int curM, Stack<String> cur){
        if(curM >= minM && curM <= maxM && cur.size() == L){
            printResult(cur);
        } else{
            for(int i = idx ; i < C ; i++){
                if(curM > maxM || (curM == maxM && isVowel(i))) continue;
                int nextM = curM;
                if(isVowel(i)) nextM++;
                cur.push(alphabets[i]);
                dfs(i + 1, nextM, cur);
                cur.pop();
            }
        }

    }

    private static boolean isVowel(int i) {
        for (String vowel : vowels) {
            if (vowel.equals(alphabets[i])) {
                return true;
            }
        }
        return false;
    }


    private static void printResult(Stack<String> cur) {
        String print = "";
        for (String s : cur) {
            print += s;
        }
        System.out.println(print);
    }
}
반응형

'👨‍🏫ps > 🔟0️⃣백준' 카테고리의 다른 글

[백준] 11724번 연결 요소의 개수 풀어보기 [백준]  (0) 2022.03.04
[백준] 15661번 링크와 스타트 풀어보기 [Java]  (0) 2022.03.04
[백준] 1748번 수 이어 쓰기 1 [Java]  (0) 2022.03.02
[백준] 17404번 RGB거리 2 풀어보기 [Java]  (0) 2022.03.02
[백준] 13398번 연속합 2 [Java]  (0) 2022.03.02
    '👨‍🏫ps/🔟0️⃣백준' 카테고리의 다른 글
    • [백준] 11724번 연결 요소의 개수 풀어보기 [백준]
    • [백준] 15661번 링크와 스타트 풀어보기 [Java]
    • [백준] 1748번 수 이어 쓰기 1 [Java]
    • [백준] 17404번 RGB거리 2 풀어보기 [Java]
    peacekim
    peacekim
    할 수 있는 것과 할 수 없는 것. github: https://github.com/PyeongGangKim

    티스토리툴바