소스 코드(초기)
# 이번에 뽑을 모음의 수, 현재 위치, 현재까지의 단어, 현재까지 뽑은 모음의 수 def v_find(v_goal,v_idx,v_word,v_cnt): # 모음을 다 뽑았으면 # 자음 뽑으러 if v_goal == v_cnt: e_find(0,v_word,v_cnt) return for e in range(v_idx,v): v_find(v_goal,e+1,v_word+[v_alpha[e]],v_cnt+1) return # 현재 위치, 현재까지 완성된 단어, 현재까지 뽑은 알파벳의 누적 수 def e_find(e_idx,e_word,e_cnt): # l과 현재까지 뽑은 알파벳 수가 같은 경우 if l == e_cnt: e_word.sort() answer.append(''.join(e_word)) return for r in range(e_idx,c-v): e_find(r+1,e_word + [e_alpha[r]], e_cnt + 1) return l,c = map(int,input().split()) board = list(map(str,input().split())) # 결과 저장할 곳 answer = [] # 모음의 수 v = 0 # 모음 저장 v_alpha = [] # 자음 저장 e_alpha = [] for q in board: if q in ['a','e','i','o','u']: v_alpha.append(q) v += 1 else: e_alpha.append(q) # w = 이번에 뽑을 모음의 수 for w in range(1,min(l-1, v+1)): v_find(w,0,[],0) answer.sort() for e in answer: print(e)
소스 코드(수정)
# 현재 위치, 뽑은 수, 현재까지 완성된 단어 def find(idx,cnt,word): # 알파벳을 다 뽑았으면 if cnt == l: v_num = word.count('a') + word.count('e') + word.count('i') + word.count('o') + word.count('u') # 모음 1개 이상, 자음 2개 이상 조건 확인 if l - v_num >= 2 and v_num >= 1: word.sort() answer.append(''.join(word)) for q in range(idx,c): find(q+1,cnt+1,word+[board[q]]) return l,c = map(int,input().split()) board = list(map(str,input().split())) answer = [] find(0,0,[]) answer.sort() for w in answer: print(w)
해결 방법
느낀 점
ps. 개인적인 코드와 코드를 작성의 이유를 적은 것입니다.
오류나 적절치 않은 문법이 존재할 수 있으며, 다른 분들께는 굉장히 비효율적인 방법으로 여겨질 수 있습니다.
혹시 개선 사항, 오류 및 문제에 대한 수정 사항 등을 댓글로 남겨주신다면 감사한 마음으로 배우고 수정하겠습니다.
'코딩 문제해결 > 문제 풀이.백준' 카테고리의 다른 글
[BOJ/백준 코딩] 물건 팔기 - PYTHON #1487 (0) | 2021.10.14 |
---|---|
[BOJ/백준 코딩] 스타트와 링크 - PYTHON #14889 (0) | 2021.10.08 |
[BOJ/백준 코딩] 부분수열의 합 - PYTHON #1182 (0) | 2021.10.06 |
[BOJ/백준 코딩] 인구 이동 - PYTHON #16234 (0) | 2021.02.27 |
[BOJ/백준 코딩] 주사위 굴리기 - PYTHON #14499 (0) | 2021.02.27 |