백준

[BOJ/python] 15813번 너의 이름은 몇 점이니?

LUNAV 2022. 3. 20. 18:17

https://www.acmicpc.net/problem/15813

 

15813번: 너의 이름은 몇 점이니?

소윤이는 성필이에게 단단히 화가 났다. 성필이가 자꾸 소윤이의 이름을 놀리는 것이다! 극대노한 소윤이는 이름에 대해 많은 검색을 하던 도중 "이름점수"라는 것을 발견하게 된다. 이름 점수

www.acmicpc.net

문제 해석

첫 번째 줄에 이름의 길이를 입력한다

두 번째 줄에 대문자로 띄어쓰기 없이 이름을 입력한다.

이후 이름의 점수를 출력한다.


코드

a = int(input())
b = input()
ans = 0
for i in range(a):
    ans += (ord(b[i]) - 64)
print(ans)

문제 풀이

내가 이 문제를 처음 풀었을 때 처럼 A = 1, B = 2... Z = 26까지 변수를 만들고 대입하는 방법도 존재는 할 것이다.

그러나 비효율적이고, 혹시나 시간초과가 뜨거나 하는 등의 이유로 풀지 못한다면 자괴감이 들기 좋을것이다.

따라서 이 코드에서는 아스키코드를 사용해 보려 한다.

밑에서 두 번째 코드를 보면, ans += (ord(b[i]) - 64) 라는 부분이 존재한다.

A는 아스키코드로 65이며, B는 66, C는 67... 이렇게 Z까지 가게 된다.

여기서 문자를 아스키코드로 바꾸어 주는게 ord()이다.

즉, 각 아스키코드에서 64씩을 빼주면 빠르고 자연스럽게 A=1, B=2... Z=26임이 성립하게 되는 것이다.

이후 ans에 그 값을 더해 문제를 해결할 수 있다.