11월 23일(목) - 브루트포스 (1759번)
1759번: 암호 만들기
첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다.
www.acmicpc.net
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
최초 생각 정리
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
문제점
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
풀이
(풀이출처 -> https://juintination.tistory.com/26)
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <stdio.h>
#include <stdlib.h>
int l, c;
char* arr, * password;
int compare(const void* a, const void* b)
{
char o1 = *(char*)a;
char o2 = *(char*)b;
if (o1 > o2) return 1;
else if (o1 < o2) return -1;
else return 0;
}
void dfs(int dpth, int idx)
{
if (dpth == l) {
int vowel = 0, consonant = 0;
for (int i = 0; i < l; i++)
{
switch (arr[i])
{
case 'a': case 'e': case'i': case'o': case'u':
vowel++;
break;
default:
consonant++;
break;
}
}
if (vowel > 0 && consonant >= 2) {
printf("%s\n", arr);
}
return;
}
for (int i = idx; i < c; i++) {
arr[dpth] = password[i];
dfs(dpth + 1, i + 1);
}
}
int main(void) {
scanf("%d %d", &l, &c);
password = (char*)malloc(sizeof(char) * c);
arr = (char*)malloc(sizeof(char) * c);
for (int i = 0; i < c; i++)
{
getchar();
scanf("%c", &password[i]);
}
qsort(password, c, sizeof(char), compare);
dfs(0, 0);
return 0;
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
'백준(C언어) > 23년 11월' 카테고리의 다른 글
[C] 백준 - 2212번: 센서 (0) | 2023.11.22 |
---|---|
[C] 백준 - 1043번: 거짓말 (0) | 2023.11.21 |
[C] 백준 - 1520번: 내리막 길 (2) | 2023.11.20 |
[C] 백준 - 2133번: 타일 채우기 (1) | 2023.11.13 |
[C] 백준 - 2437번: 저울 (0) | 2023.11.08 |
댓글