[Python] 백준 3059번_등장하지 않는 문자의 합
https://www.acmicpc.net/problem/3059
3059번: 등장하지 않는 문자의 합
입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터는 한 줄로 구성되어 있고, 문자열 S가 주어진다. S는 알파벳
www.acmicpc.net
- 알파벳 대문자로 구성되어있는 문자열 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()으로 총합을 구함
참고)
https://seongonion.tistory.com/126
[Python] 아스키코드 사용하기
아스키코드란? 미국정보교환표준부호(영어: American Standard Code for Information Interchange), 또는 줄여서 ASCII( /ˈæski/, 아스키)는 영문 알파벳을 사용하는 대표적인 문자 인코딩이다. 아스키는 컴퓨터와
seongonion.tistory.com
[BaekJoon] 3059번 : 등장하지 않는 문자의 합 (Python)
코딩 1일 1문제! 오늘의 문제는 백준의 등장하지 않는 문자의 합입니다. 3059번: 등장하지 않는 문자의 합 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나
somjang.tistory.com