새소식

⌨️ Algorithms/백준

[Python] 백준 3059번_등장하지 않는 문자의 합

2023. 3. 1. 20:27

  • -

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

 

https://somjang.tistory.com/entry/BaekJoon-3059%EB%B2%88-%EB%93%B1%EC%9E%A5%ED%95%98%EC%A7%80-%EC%95%8A%EB%8A%94-%EB%AC%B8%EC%9E%90%EC%9D%98-%ED%95%A9-Python

 

[BaekJoon] 3059번 : 등장하지 않는 문자의 합 (Python)

코딩 1일 1문제! 오늘의 문제는 백준의 등장하지 않는 문자의 합입니다. 3059번: 등장하지 않는 문자의 합 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나

somjang.tistory.com

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다!