문제
알파벳 대문자로 구성되어있는 문자열 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)
'-- 예전 기록 > BOJ' 카테고리의 다른 글
[ BOJ ] 12871 : 무한 문자열 ( SILVER 5 ) / C, Python (0) | 2023.11.18 |
---|---|
[ BOJ ] 11944 : NN ( BRONZE 2 ) / C, Python (0) | 2023.11.17 |
[ BOJ ] 10825 : 국영수 ( SILVER 4 ) / Python (0) | 2023.11.17 |
[ BOJ ] 1094 : 막대기 ( SILVER 5 ) / C, Python (0) | 2023.11.16 |
[ BOJ ] 12833 : XORXORXOR ( BRONZE 1 ) / C, Python (0) | 2023.11.16 |