[문제 링크]
http://projecteuler.net/problem=22
[문제 요약]
“names.txt” 정렬이 안된 텍스트 파일을 읽어 모든 이름을 아래의 룰에 따라 연산한 합의 결과를 출력
COLIN 은 알파벳 순서로 정렬시 938번째에 존재한다.
C = 3
O = 15
L = 12
I = 9
N = 14
========
SUM = 53
nameScore = 938 * 53 = 49714
그렇다면 텍스트 파일에 포함된 모든 숫자의 nameScore의 합은?
[문제 풀이]
1. 파일을 읽는다.
2. 파일을 쉼표(,) 를 기준으로 split() 한다.
3. split() 된 파일을 정렬한다.
4. split() 의 결과를 반복하며 알파벳의 순서를 합산한다.
[소스코드]
""" # 22_Names_scores.py # Date: 2014. 08. 01 # Author: coozplz@gmail.com # 학습내용 1. 파일 읽기 2. 리스트 정렬 3. Character 를 ASCII 코드값으로 출력 """ #이름 정보를 저장할 파일명 nameList = [] f = open("names.txt", "r") # 파일을 읽는다. line = f.read() # 라인을 , 를 구분으로 자른다. aStr = line.split(",") for n in aStr: nameList.append(n) print("Size =", len(nameList)) #이름을 정렬한다. nameList.sort() # 합산 점수를 저장 sumOfScores = 0 # 이름의 위치한 행의 번호 rowCount = 1 for name in nameList: nameCount = 0 ''' # 이름에 따옴표가 포함된 경우 제거 ''' name = name.replace("\"", "") for ch in name: ''' # 이름을 한자씩 잘라서 ASCII 값으로 알파벳의 덧셈을 처리한다. # Ex) A = 1, B = 2 ''' nameCount += (ord(ch) - (ord('A')-1)) sumOfScores += (nameCount * rowCount) rowCount += 1 print(sumOfScores)