Daily Algorithm - Day 21

105·2025년 1월 11일
0

Daily Algorithm

목록 보기
22/30

Names Scores

Using names.txt, a 46K text file containing over five-thousand first names, begin by sorting it into alphabetical order. Then working out the alphabetical value for each name, multiply this value by its alphabetical position in the list to obtain a name score.

For example, when the list is sorted into alphabetical order, COLIN,
which is worth 3+15+12+9+14=533 + 15 + 12 + 9 + 14 = 53, is the 938938th name in the list.
So, COLIN would obtain a score of 938×53=49714938 \times 53 = 49714.

What is the total of all the name scores in the file?

names.txt에 있는 이름들을

  • 먼저 모든 이름을 알파벳 순으로 정렬한다.
  • 각 이름에 대해서, 그 이름을 이루는 알파벳에 해당하는 수(A=1, B=2, ..., Z=26)를 모두 더한다.
  • 여기에 이 이름의 순번을 곱한다.

위의 규칙대로 점수를 메겨 모든 이름의 점수를 합한 값을 구하는 문제이다.

내가 생각한 구현방식은 다음과 같다.

  1. names.txt를 불러와서 list로 만들어 준 후 sort()를 활용해 정렬해준다.
  2. 각 이름의 점수를 구해주는 함수를 작성해준다.
  3. 반복문을 통해 모든 이름의 점수를 구해 더해준다.

간단하니 한번에 구현해 보자.

//Python

# 대문자 알파벳 리스트를 위한 import
from string import ascii_uppercase
alphabets = list(ascii_uppercase)  # = ['A','B','C'...'Z']

# 쌍따옴표 제거 및 ','를 기준으로 list화 후 정렬
filename = './Day21~30/Day_21/names.txt'
f = open(filename, 'r')
names = f.read().replace('"','')
names = names.split(',')
names.sort()

# 이름의 점수를 구해주는 함수
def score(name):
    spell_score = 0
    index_score = names.index(name) + 1
    for spell in name:
        spell_score += (alphabets.index(spell)+1)
    return spell_score * index_score

# 반복문을 통해 모든 이름의 점수를 더해준다.
sum_score = 0
for name in names:
    sum_score += score(name)

print(sum_score)

>>> 871198282	# correct

오늘은 여기까지
-2025.01.11-

profile
focus on backend

0개의 댓글