티스토리 뷰

알고리즘 공부/백준

백준 1062번

_Yunhwan 2022. 10. 27. 23:32

https://www.acmicpc.net/problem/1062

 

1062번: 가르침

첫째 줄에 단어의 개수 N과 K가 주어진다. N은 50보다 작거나 같은 자연수이고, K는 26보다 작거나 같은 자연수 또는 0이다. 둘째 줄부터 N개의 줄에 남극 언어의 단어가 주어진다. 단어는 영어 소문

www.acmicpc.net

import sys

n, k = map(int, input().split())

arr = []
# anta tica에 들어가는 알파벳
cur = ['a', 'n', 't', 'i', 'c']
#cur을 제외한 알파벳
alphabet = [
    'b', 'd', 'e', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'o', 'p', 'q', 'r', 's',
    'u', 'v', 'w', 'x', 'y', 'z'
]

result = 0

# 입력 받기
for i in range(n):
    s = str(input().strip())
    arr.append(s)

if k < 5:
    print(0)
    sys.exit()

#cur에 있는 알파벳만 사용하는 단어 찾기
def check():
    result = 0
    for i in range(len(arr)):
        visited = True
				#anta ? tica이므로 인덱스범위 4 ~ len(arr[i])-4
        for j in range(4, len(arr[i]) - 4):
            if arr[i][j] not in cur:
                visited = False
                break
				# 해당 배열로 조합가능하다면
        if visited == True:
            result += 1
    return result

#dfs 탐색을 통해 가르칠 수 있는 최대 단어수 찾기
def  dfs(cnt, start):
    global result
		#k와 cnt가 같을 경우
    if cnt == k:
				#최대값을 reuslt로 갱신
        result = max(result, check())
        return
    for i in range(start, len(alphabet)):
        cur.append(alphabet[i])
        dfs(cnt+1, i+1)
        cur.pop()
        
        
        

dfs(5, 0)
print(result)

 

브루드 포스 풀이의 경우는 시간초과

dfs 탐색을 통한 풀이

 

 

anta tica에 포함되는 알파벳은 cur 배열

cur에 해당되지 않는 알파벳은 alphabet

'알고리즘 공부 > 백준' 카테고리의 다른 글

백준 1189번  (0) 2022.10.29
백준 17086번  (0) 2022.10.29
백준 1806번  (0) 2022.10.27
백준 17070번  (0) 2022.10.26
백준 12869번  (0) 2022.10.26
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함