반응형
    
    
    
  
                              Notice
                              
                          
                        
                          
                          
                            Recent Posts
                            
                        
                          
                          
                            Recent Comments
                            
                        
                          
                          
                            Link
                            
                        
                    | 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 | 
| 9 | 10 | 11 | 12 | 13 | 14 | 15 | 
| 16 | 17 | 18 | 19 | 20 | 21 | 22 | 
| 23 | 24 | 25 | 26 | 27 | 28 | 29 | 
| 30 | 
                            Tags
                            
                        
                          
                          - boj
- 카카오
- sort
- 파이썬
- Backjoon
- Python
- DP
- SW역량테스트
- 코테
- Blind
- javascript
- kakao
- 다이나믹프로그래밍
- 그래프
- SWEA
- 삼성
- 자료구조
- 힙큐
- 싸피
- 백준
- SSAFY
- 완전탐색
- 자바스크립트
- DFS
- algorithm
- 스택
- BFS
- 코딩테스트
- 알고리즘
- 프로그래머스
                            Archives
                            
                        
                          
                          - Today
- Total
맞왜틀
[python] 백준 - 1759. 암호 만들기 본문
반응형
    
    
    
  문제 해결
1. 암호는 알파벳 순서로 짜야하므로 오름차순 정렬
2. 모음의 포함 유무를 확인하기 위해 aeiou를 생성
3. 자음이 1개이상, 모음이 2개이상일 때 result에 추가
소스 코드
def bt(idx, word):
    # 암호의 길이가 L이 됐을 때
    if len(word) == L:
        vowel_cnt = 0
        consonant_cnt = 0
        for w in word:
            if w in vowel:
                vowel_cnt += 1
            else:
                consonant_cnt += 1
            # 자음이 1개 이상, 모음이 2개 이상일 때만 result에 추가해 준다.
            if vowel_cnt >= 1 and consonant_cnt >= 2:
                result.add(word)
                break
        return
    # 함수에 들어갈 때 이전 선택 다음부터 선택: i+1
    for i in range(idx, C):
        bt(i+1, word+words[i])
L, C = map(int, input().split())
words = input().split()
# 문제에서 암호는 알파벳이 증가하는 순서 대로 짜야 하므로
words.sort()
# 모음의 포함 유무 확인용
vowel = 'aeiou'
# 중복된 결과 선택을 피하기 위해 set 사용
result = set()
bt(0, '')
# set은 순서가없으므로 list로 바꿔준 후 정렬
result = list(result)
result.sort()
for row in result:
    print(row)
출처 : BACKJOON ONLINE JUDGE
문제 : https://www.acmicpc.net/problem/1759
1759번: 암호 만들기
첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다.
www.acmicpc.net
반응형
    
    
    
  'Algorithm Problem > Python' 카테고리의 다른 글
| [python] 백준 - 15684. 사다리 조작 (0) | 2020.05.28 | 
|---|---|
| [python] 백준 - 1753. 최단경로 (0) | 2020.05.27 | 
| [python] 백준 - 7568. 덩치 (0) | 2020.05.25 | 
| [python] 백준 - 1922. 네트워크 연결 (3) | 2020.05.22 | 
| [python] 백준 - 2644. 촌수계산 (0) | 2020.05.21 | 
 
                   
                   
                  