알파벳 대문자로 구성되어있는 문자열 S가 주어졌을 때, S에 등장하지 않는 알파벳 대문자의 아스키 코드 값의 합 구하기
문자열 S가 “ABCDEFGHIJKLMNOPQRSTUVW” 일 때, S에 등장하지 않는 알파벳 대문자는 X, Y, Z
X의 아스키 코드 값은 88, Y는 89, Z는 90이므로 이 아스키 코드 값의 합은 267
입력
입력은 T개의 테스트 데이터로 구성
입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어짐
각 테스트 데이터는 한 줄로 구성되어 있고, 문자열 S가 주어짐
S는 알파벳 대문자로만 구성되어 있고, 최대 1000글자
출력
각 테스트 데이터에 대해, 입력으로 주어진 문자열 S에 등장하지 않는 알파벳 대문자의 아스키 코드 값의 합을 한 줄에 하나씩 출력
시간 제한: 1초
메모리 제한: 128 MB
"""
입출력 예시)
2
ABCDEFGHIJKLMNOPQRSTUVW
A
-> 267
1950
"""
## 의사코드 ##
# 아스키코드 값 -> ord(str)
# 전체 알파벳을 담은 리스트
# alphabet = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
# res = 0
# for i in alphabet:
# # 현재 알파벳이 문자열 s에 등장하지 않으면 아스키코드 값 더하기
# if i not in s:
# res += ord(i)
# print(res)
통과한 코드
t = int(input())
for _ in range(t):
s = input()
# 전체 알파벳을 담은 리스트
alphabet = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
res = 0
for i in alphabet:
# 현재 알파벳이 문자열 s에 등장하지 않으면 아스키코드 값 더하기
if i not in s:
res += ord(i)
print(res)
ord('str')
문자열을 아스키코드 값으로 변환
chr(int)
아스키코드를 문자열로 변환
알파벳의 아스키코드는 대문자가 소문자보다 더 작음
알파벳의 순서에 따라 아스키코드의 숫자가 1씩 증가
다른 풀이
def get_not_appearing_word_sum(input_list):
input_str_ascii_list = set([ord(char) for char in input_list])
not_appearing = [num for num in range(ord('A'), ord('Z') + 1) if num not in input_str_ascii_list]
return sum(not_appearing)
if __name__ == "__main__":
for i in range(int(input())):
input_list = list(input())
print(get_not_appearing_word_sum(input_list))
-> 전체 알파벳 리스트를 따로 만들지 않고, for문의 range를 ord('A')부터 ord('Z')+1 까지로 설정해서 문자열에 등장하지 않는 알파벳 아스키코드 값을 찾음
입력받은 문자열에서 각 문자를 하나씩 가져와 ord()로 아스키코드로 변환한 다음, set()으로 중복 제거.
ord('A')부터 ord('Z')까지 반복문을 돌면서 입력받은 아스키코드가 아닌 값들만 모아서 sum()으로 총합을 구함