일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 12969
- 수 정렬하기2
- 정규 표현식 #문자열
- Python
- 파이썬
- 구현
- 더하기 시리즈
- Greedy
- 오늘의 계획
- ENFJ
- 웹 페이지 입문
- 다이나믹 프로그래밍
- 2
- 1
- DFS
- 스택
- 11066
- 백준
- 백준풀이
- 정렬
- 컴공
- 브루트포스
- HTML
- 백트래킹
- 3
- BFS
- 오픽
- 코딩
- DP
- knuth_optimization
- Today
- Total
코딩하는 Fug
1062 가르침 본문
https://www.acmicpc.net/problem/1062
#완전 탐색
#백트래킹
1062번: 가르침
첫째 줄에 단어의 개수 N과 K가 주어진다. N은 50보다 작거나 같은 자연수이고, K는 26보다 작거나 같은 자연수 또는 0이다. 둘째 줄부터 N개의 줄에 남극 언어의 단어가 주어진다. 단어는 영어 소문
www.acmicpc.net
#1062 가르침 정리
from sys import stdin
#stdin 수입
#시간초과를 없애야 한다.
input=stdin.readline
#input 변환
def solution(index,count):
global max_answer
#max_answer 전역함수로 변경
if count==0:
#함수를 끝낼 조건
answer=0
for i in set_word_list:
for j in i:
if not alpha[ord(j)-ord('a')]:
break
else:
answer+=1
max_answer=max(answer,max_answer)
#단어 리스트를 집합으로 해놓은 것을 열어서 각 알파벳이 alpha 인덱스('a'는 0이라는 가정)에서 트루인지 확인후 아니면 바로 캔슬 다 통과되면 answer +=1 그리고 max_answer를 갱신합니다
else:
for i in range(index,26):
if not alpha[i]:
alpha[i]=True
solution(i+1,count-1)
alpha[i]=False
#백트래킹의 조건 26까지 인덱스를 하나씩 올리면서 true false 움직인다.
n,k=map(int,input().split())
#n,k입력
word_list=[input().rstrip() for i in range(n)]
#stdin 이므로 rstrip 을 이용해서 \n이 입력 되지않게 막아주어야 합니다.
set_word_list=[]
#집합을 이용할 단어 리스트
alpha_set=set([])
#필요한 알파벳을 담을 집합
for i in word_list:
alpha_set|=set(i)
#필요한 알파벳의 집합과 list에 있는 알파벳들을 집합화시켜 합집합
set_word_list.append(set(i))
#집합을 이용할 단어 리스트 저장
alpha=[False for i in range(26)]
#dp 비슷하게 아스키코드를 이용할 알파벳 리스트 작성
max_answer=0
for i in ['a','n','t','i','c']:
alpha[ord(i)-ord('a')]=True
#antic는 이미 배웠다고 가정하고 true
if k<5 or k>=len(alpha_set):
print(0 if k<5 else n)
#필요한 알파벳보다 배울 알파벳의 수가 더 크면 무조건 단어의 개수 출력
else:
solution(0,k-5)
#인덱스 0 부터 k에 antic를 뺸 수를 이용해서 함수를 돌린다.
print(max_answer)
#답 만들기
#개힘들다 죽고싶다 하지만 의미있었다. 완전탐색을 제대로 알 수있었으며 백트래킹을 활용하여 모든 경우의 수를 다 살펴보는 그런 시간이였다.
'백준풀이-python' 카테고리의 다른 글
1806 부분합 (0) | 2021.07.28 |
---|---|
1700 멀티탭 스케쥴링 (0) | 2021.07.27 |
14719 빗물 (0) | 2021.07.22 |
2504 괄호의 값 (0) | 2021.07.20 |
1916 최소비용 구하기 (0) | 2021.07.19 |