본문 바로가기
개발/알고리즘 문제

[Project Euler 42] 주어진 텍스트 파일에 들어있는 '삼각단어'의 개수는?

by 유다110 2016. 7. 6.
반응형

n번째 삼각수는 tn = ½ n (n + 1) 이라는 식으로 구할 수 있는데, 처음 10개는 아래와 같습니다.

1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...

어떤 영어 단어에 대해서, 각 철자의 알파벳 순서(A=1, B=2, ..., Z=26)를 모두 더한 값을 '단어값'이라 부르기로 합니다. 예를 들어 'SKY'의 단어값은 19 + 11 + 25 = 55가 되는데, 이것은 우연히도 t10과 같습니다.
이렇게 어떤 단어의 단어값이 삼각수일 경우에는 이 단어를 '삼각단어'라 부르기로 합니다.

약 16KB의 텍스트 파일 words.txt에는 2000개 정도의 영어 단어가 수록되어 있습니다. 이 중에서 삼각단어는 모두 몇 개입니까?




import string
text = open('./41-50/words.txt', 'r', encoding='utf-8')
def get_nth_triangle_num(n):
triangle_num = int(0.5*n*(n+1))
return triangle_num
def if_alp_triangle_num(alp_string):
triangle_num, cnt = 0, 1
result_sum = sum([string.ascii_uppercase.index(i)+1 for i in list(alp_string)])
while triangle_num <= result_sum :
triangle_num = get_nth_triangle_num(cnt)
if result_sum == triangle_num :
return True
else :
cnt += 1
return False
def get_num_of_triangle_num_of_words():
result_true = 0
words = text.readline()
for word in words.split(','):
alp_string = word.replace('"', '').replace('"', '')
if if_alp_triangle_num(alp_string) == True:
result_true += 1
return result_true
print(get_num_of_triangle_num_of_words())


반응형

댓글