문제
https://www.acmicpc.net/problem/1759
소스코드
import sys
input = sys.stdin.readline
if __name__ == "__main__":
l,c = map(int,input().split())
arr = sorted(input().split())
visited = [0] * c
res = []
def check():
tmp = ''
mo_list = ['a', 'e', 'o', 'i', 'u']
mo,ja = 0,0
for i in range(c):
if visited[i]:
tmp += arr[i]
if arr[i] in mo_list:
mo += 1
else:
ja += 1
if mo>=1 and ja>=2:
res.append(''.join(tmp))
return
def dfs(level,start):
if level >= l:
check()
return
for i in range(start,c):
if not visited[i]:
visited[i] = 1
dfs(level+1,i+1)
visited[i] = 0
dfs(0,0)
for word in res:
print(word)
설명
- 문자열을 입력 받는다.
- 문자열을 sort해서 오름차순으로 정렬한다.
- 백트래킹을 이용해서 오름차순으로 l 개 만큼 체크해준다.
- l 개의 단어가 있는 문자열이 만들어지면 자음이 2개 이상 모음이 1개 이상 있는지 체크해준다
후기
문자열을 오름차순 해줄 때 처음에 내가 아스키코드값으로 변환해서 아래와 같이 했다.
arr = input().split()
arr.sort(key = lambda x: ord(x[0]))
파이썬은 sort 함수를 쓰면 문자를 아스키코드 값에 대응해서 자동으로 정렬해준다
'Algorithm' 카테고리의 다른 글
[백준][python]21315 카드 섞기 (0) | 2023.05.29 |
---|---|
[백준][python]2503 숫자야구 (0) | 2023.05.26 |
[백준][python]14620 꽃길 (0) | 2023.05.25 |
[백준][python]3085 사탕게임 (0) | 2023.05.24 |
[백준][python]1937 욕심쟁이 판다 (0) | 2023.05.17 |