약 5천개의 영문이름이 있는데, 각 이름의 알파벳을 A=1,B=2,,, 의 숫자로 치환해서 합산한 다음, 그 이름의 index와 곱해서 전체를 누적하는 것이 문제입니다.
예를 들어, 리스트의 첫번째이름은 MARY 이고, 이를 숫자로 변환하면, M=13,A=1,R=18 ,Y=25 이고, 합은 13+1+18+25=57이고, 인덱스는 5000개중에 1번이기 때문에, 57*1=57입니다. (인덱스는 알파벳순으로 정렬을 다시해야해서, 인덱스값이 달라집니다.)
파일 내용확인
with open('q022_data.txt') as data: contents = data.read() print(contents)
"MARY","PATRICIA","LINDA","BARBARA","ELIZABETH","JENNIFER","MARIA","SUSAN","MARGARET","DOROTHY","LISA","NANCY","KAREN","BETTY","HELEN","SANDRA","DONNA","CAROL","RUTH","SHARON","MICHELLE","LAURA","SARAH","KIMBERLY","DEBORAH","JESSICA","SHIRLEY","CYNTHIA","ANGELA","MELISSA","BRENDA","AMY","ANNA","REBECCA","VIRGINIA","KATHLEEN","PAMELA","MARTHA","DEBRA","AMANDA","STEPHANIE",,,,,,,,,,,,,,
텍스트 안에는 따옴표(")와 콤마(,)가 혼합된 상태입니다.
텍스트 처리
with open('q022_data.txt') as data: names = data.read().replace('"','').split(',')
['MARY', 'PATRICIA', 'LINDA', 'BARBARA', 'ELIZABETH', 'JENNIFER', 'MARIA', 'SUSAN', 'MARGARET', 'DOROTHY', 'LISA', 'NANCY', 'KAREN', 'BETTY', 'HELEN', 'SANDRA', 'DONNA', 'CAROL', 'RUTH', 'SHARON', 'MICHELLE', 'LAURA', 'SARAH', 'KIMBERLY', 'DEBORAH', 'JESSICA', 'SHIRLEY', 'CYNTHIA', 'ANGELA', 'MELISSA', 'BRENDA', 'AMY', 'ANNA', 'REBECCA', 'VIRGINIA', 'KATHLEEN', 'PAMELA', 'MARTHA',,,,,,,,,,
다시 불러오면서, 따옴표는 치환명령으로 삭제를 해주었고, 컴마를 기준으로 split을 했습니다. split을 하고 나면, 데이터형은 List형으로 전환됩니다.
names.sort()
['AARON', 'ABBEY', 'ABBIE', 'ABBY', 'ABDUL', 'ABE', 'ABEL', 'ABIGAIL', 'ABRAHAM', 'ABRAM', 'ADA', 'ADAH', 'ADALBERTO', 'ADALINE', 'ADAM', 'ADAN', 'ADDIE', 'ADELA', 'ADELAIDA', 'ADELAIDE', 'ADELE',
정렬을 해주고,
print(contents.isupper())
루프문 작성
for idx,val in enumerate(names[:20]): print(idx+1,val,end=' ') for i in val: print(ord(i)-64,end=',') print()
1 AARON 1,1,18,15,14, 2 ABBEY 1,2,2,5,25, 3 ABBIE 1,2,2,9,5, 4 ABBY 1,2,2,25, 5 ABDUL 1,2,4,21,12, 6 ABE 1,2,5, 7 ABEL 1,2,5,12, 8 ABIGAIL 1,2,9,7,1,9,12, 9 ABRAHAM 1,2,18,1,8,1,13, 10 ABRAM 1,2,18,1,13, 11 ADA 1,4,1,
ord()는 문자의 아스키코드값을 얻어내는 명령입니다. 대문자A가 65이기 때문에, 64를 빼면, 1부터 시작하는 일련번호를 얻을수 있습니다.
합계 계산
with open('q022_data.txt') as data: names = data.read().replace('"','').split(',') names.sort() grand_total =0 for idx,val in enumerate(names): total=0 for i in val: total=total+ord(i)-64 grand_total+=total*(idx+1) print(grand_total)
제대로 출력이 되는걸 확인했으면 전체 합산을 해주면 됩니다.