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 | 31 |
Tags
- 큐
- Image Segmentation
- 한빛미디어
- 입문
- MySQL
- 협업필터링
- 엘리스
- DFS
- TEAM-EDA
- 나는리뷰어다
- Object Detection
- Recsys-KR
- 코딩테스트
- 알고리즘
- 나는 리뷰어다
- 튜토리얼
- 파이썬
- hackerrank
- Segmentation
- DilatedNet
- Machine Learning Advanced
- 3줄 논문
- Semantic Segmentation
- TEAM EDA
- Python
- eda
- pytorch
- 추천시스템
- 프로그래머스
- 스택
Archives
- Today
- Total
TEAM EDA
[엘리스] 엘리스의 동물어 수업 본문
엘리스의 동물어 수업
코더랜드에는 말을 할 수 있는 동물들이 모여사는 aniski 나라가 있습니다. 이 나라의 동물들은 aniski어라는 조금 특별한 언어를 사용합니다. aniski어는 특이하게도 모든 말을 "ani"로 시작해서 "ski"로 끝이 납니다.
엘리스는 이 나라에 동물어 학습지를 판매 하고 있습니다. 홍보를 위해 짧은 시간 동안 동물 어린이들에게 글자를 가르쳐서 얼마나 효과가 좋은 지 증명하려고 합니다. 엘리스가 몇 개의 글자를 가르쳤을 때 동물 어린이들이 배울수 있는 단어는 몇 개나 될까요?
입력 예시 1
7
3
anircski
anihelloski
anirzcski
출력 예시 1
1
입력 예시 2
8
3
anircski
anihelloski
anirzcski
출력 예시 2
2
입력
- 첫 번째 줄에 엘리스가 가르친 글자의 숫자가 주어집니다. 이 글자의 수는 0이상 26이하의 알파벳 소문자입니다.
- 두 번째 줄에는 aniski어의 단어의 수가 주어집니다. 이 수는 1이상 100 이하 입니다.
- 세 번째 줄부터 aniski어의 단어가 주어집니다. 이 단어는 중복 되지 않음이 보장됩니다.
출력
- 학생들이 읽을 수 있는 단어의 개수의 최댓값을 출력하세요.
모범 답안
- a, i, k, n, s는 모든 단어에 들어가므로 5개를 제외
- 3가지 경우로 나누어서 dfs를 진행
-
- 알파벳을 모두 추가한 경우
- 단어별로 몇개나 학습이 가능한지 계산
- 가장 긴 숫자를 반환
- 알파벳을 모두 추가한 경우
-
- 알파벳을 하나도 추가하지 않은 경우
- a부터 z까지 차례대로 하나씩 넣어보면서 진행
- 알파벳을 하나도 추가하지 않은 경우
-
- 알파벳을 하나라도 추가한 경우
- 추가한 알파벳 이후로 조사(알파벳은 순서가 상관없기에 무방)
- 알파벳을 하나라도 추가한 경우
-
def to(st):
tl = st.replace('a','').replace('i','').replace('k','').replace('n','').replace('s','')
return tl
def ct(st, tst):
for x in st:
if x not in tst: return False
return True
def gs(st):
global max_word
# 알파벳을 모두 추가한 경우
if len(st) == k:
this_len = 0
for x in range(n):
if ct(s[x], st): this_len += 1
if max_word < this_len: max_word = this_len
# a, i, k, n, s이외의 알파벳을 하나도 추가하지 못한 경우
elif len(st) == 0:
# ord는 문자열을 순자로 반환 <-> char는 숫자를 문자열로 반환
for x in range(ord('a'), ord('z') + 1):
if x == ord('a') or x == ord('i') or x == ord('k') or x == ord('n') or x == ord('s'): continue
# 모든 문자열에 대해 진행
gs(st + chr(x))
# a, i, k, n, s이외의 알파벳을 하나라도 추가한 경우
else:
# 추가한 알파벳이후로 계산
# 알파벳은 순서가 상관없기에 st[-1]이후로 해줘도 무방함
for x in range(ord(st[-1]) + 1, ord('z') + 1):
if x == ord('a') or x == ord('i') or x == ord('k') or x == ord('n') or x == ord('s'): continue
# 모든 문자열에 대해 진행
gs(st + chr(x))
k = int(input())
n = int(input())
s = []
max_word = 0
k -= 5
for x in range(n):
s.append(to(input()))
if k < 0:
print(0)
else:
gs('')
print(max_word)
출처 : 엘리스 아카데미, https://academy.elice.io/learn
'EDA Study > 알고리즘' 카테고리의 다른 글
[엘리스] 두 번째 최대값 (0) | 2020.03.28 |
---|---|
[엘리스] 이진트리 만들기 (0) | 2020.03.28 |
[엘리스] 스도쿠 마스터 (0) | 2020.03.27 |
[엘리스] 숫자놀이 (0) | 2020.03.27 |
[엘리스] 흰토끼의 장사하자 (0) | 2020.03.26 |