본문으로 바로가기
  • 알파벳을 오름차순으로 정렬하고 조합 함수를 사용하여 가능한 암호의 모든 경우의 수를 구한다.
#include <cstdio>
#include <algorithm>
using namespace std;

int l, c;
char a[15];
char code[15];

void combination(int, int);
bool vowel(char);

int main() {
  scanf("%d %d", &l, &c);
  for (int i=0; i<c; i++) {
    scanf(" %c", &a[i]);
  }
  sort(a, a+c);// 사전순 출력을 위해 오름차순 정렬
  combination(0, 0);
  return 0;
}

void combination(int i, int k) {
  if (k == l) {
    int x = 0;// 모음 개수
    int y = 0;// 자음 개수
    for (int i=0; i<l; i++) {
      vowel(code[i]) ? x++ : y++;
    }
    if (x >= 1 && y >= 2) {
      for (int i=0; i<l; i++) {
        printf("%c", code[i]);
      }
      puts("");
    }
    return;
  }

  if (i == c) return;

  // i번째 알파벳을 선택하는 경우
  code[k] = a[i];
  combination(i+1, k+1);

  // i번째 알파벳을 선택하지 않는 경우
  combination(i+1, k);
}

bool vowel(char ch) {
  return ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u';
}

'Programming > Baekjoon Online Judge' 카테고리의 다른 글

[BOJ] 1987: 알파벳  (0) 2018.07.10
[BOJ] 2580: 스도쿠  (0) 2018.07.10
[BOJ] 1759: 암호 만들기  (1) 2018.07.10
[BOJ] 2251: 물통  (0) 2018.07.10
[BOJ] 9019: DSLR  (0) 2018.07.10
[BOJ] 1963: 소수 경로  (0) 2018.07.10

댓글을 달아 주세요

  1. Favicon of https://blog.naver.com/lmj3322 Yumin 2019.01.01 01:08 신고

    .... 저도 이렇게 접근을 했는데, 어디서 놓쳐서 출력이 잘 안 되네요 ㅠㅠ

    다른 분들이 쓰면 맞고, 제가 쓰면 틀릴 때 조금 슬퍼요.

    아무튼, 많은 도움이 되었습니다.