반응형
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개 정도의 영어 단어가 수록되어 있습니다. 이 중에서 삼각단어는 모두 몇 개입니까?
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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()) |
반응형
'개발 > 알고리즘 문제' 카테고리의 다른 글
[Codility] BinaryGap (4) | 2017.11.01 |
---|---|
[Project Euler 56] ab 형태의 자연수에 대해 자릿수 합의 최대값 구하기 (2) | 2017.08.17 |
[Project Euler 41] n자리 팬디지털 소수 중에서 가장 큰 수 (4) | 2016.07.06 |
[try helloworld level 5] 124나라의 숫자 (2) | 2016.06.02 |
[try helloworld level 3] 다음 큰 숫자 (4) | 2016.06.02 |
댓글