코딩 테스트/Baekjoon

G5 1759. 암호 만들기

  • -
728x90
반응형

문제 보기 :  1759번: 암호 만들기


문제

  • 정답률 : 44%


작성 코드

# 입력받기
a, b = map(int, input().split())  # a: 만들 암호 길이, b: 알파벳 개수
ls = list(input().split())  # 사용할 알파벳 리스트
ls.sort()  # 알파벳 정렬 (사전순 출력을 위해)

# 모음과 자음을 구분
left = [i for i in ls if i in ['a', 'e', 'i', 'o', 'u']]  # 모음
right = [i for i in ls if i not in ['a', 'e', 'i', 'o', 'u']]  # 자음

# 조합 생성 함수
def combinations(arr, n, new, c):
    answer = []
    # 원하는 길이(n)만큼 조합이 완성된 경우
    if len(new) == n:
        return [new]
    # 조합 생성
    for i in range(c, len(arr)):
        answer.extend(combinations(arr, n, new + [arr[i]], i + 1))
    return answer

# 주어진 알파벳 리스트에서 길이가 a인 모든 조합 생성
all_list = [''.join(k) for k in combinations(ls, a, [], 0)]

# 조건에 맞는 암호 출력
for l in all_list:
    mo = sum([1 for i in l if i in left])  # 해당 조합의 모음 개수
    za = sum([1 for i in l if i in right])  # 해당 조합의 자음 개수
    # 모음이 1개 이상, 자음이 2개 이상인 경우만 출력
    if mo >= 1 and za >= 2:
        print(l)

풀이

이 코드는 암호를 만들기 위한 알고리즘이다.

사용자는 암호의 길이와 사용할 알파벳을 입력하고, 프로그램은 주어진 조건에 맞는 암호를 출력한다.

먼저 입력받은 알파벳 리스트를 정렬하여 사전순 출력을 보장한다.

이후 알파벳을 모음과 자음으로 분류한다. 조합 생성 함수를 사용하여 주어진 알파벳 중 길이가 지정된 암호 길이와 동일한 모든 조합을 만든다. 만들어진 조합에서 모음이 1개 이상이고 자음이 2개 이상인 조합만 출력한다.

최종적으로 조건에 맞는 암호들을 사전순으로 출력한다.

320x100
728x90

'코딩 테스트 > Baekjoon' 카테고리의 다른 글

S2 9020. 골드바흐의 추측  (2) 2024.12.27
G5 5430. AC  (0) 2024.12.27
S3 1904. 01타일  (1) 2024.12.21
S4 14425. 문자열 집합  (0) 2024.12.17
G4 1753. 최단경로  (0) 2024.12.17
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.