-- 예전 기록/BOJ

[ BOJ ] 3059 : 등장하지 않는 문자의 합 ( BRONZE 3 ) / C, Python

rejo 2023. 11. 17. 10:50

문제

알파벳 대문자로 구성되어있는 문자열 S가 주어졌을 때, S에 등장하지 않는 알파벳 대문자의 아스키 코드 값의 합을 구하는 프로그램을 작성하시오.

문자열 S가 “ABCDEFGHIJKLMNOPQRSTUVW” 일 때, S에 등장하지 않는 알파벳 대문자는 X, Y, Z이다. X의 아스키 코드 값은 88, Y는 89, Z는 90이므로 이 아스키 코드 값의 합은 267이다.

알파벳 대문자의 아스키 코드 값은 다음과 같다.

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
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90

입력

입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터는 한 줄로 구성되어 있고, 문자열 S가 주어진다. S는 알파벳 대문자로만 구성되어 있고, 최대 1000글자이다.

출력

각 테스트 데이터에 대해, 입력으로 주어진 문자열 S에 등장하지 않는 알파벳 대문자의 아스키 코드 값의 합을 한 줄에 하나씩 출력한다.

풀이 과정

등장한 알파벳 정보를 카운팅하고, 이를 통해 등장하지 않은 알파벳들을 구하여 아스키 코드 값을 더한다.

C

#include <stdio.h>
#include <string.h>

int main(void) {
    int t;
    scanf("%d", &t);

    char str[1005];
    while(t--) {
        scanf("%s", str);

        int alpha[26] = {0,};
        for (int i = 0; i < strlen(str); i++) alpha[str[i] - 'A'] = 1;

        int result = 0;
        for (int i = 0; i < 26; i++) {
            if (alpha[i] == 0) result += i + 'A';
        }

        printf("%d\n", result);
    }
    return 0;
}

Python

import sys
input = sys.stdin.readline

t = int(input().rstrip())
for _ in range(t):
    string = input().rstrip()
    alpha = {chr(k+ord('A')):0 for k in range(26)}
    for s in string:
        alpha[s] = 1
    
    result = 0
    for k in range(26):
        if alpha[chr(k+ord('A'))] == 0:
            result += k + 65
    
    print(result)