본문 바로가기

백준/C++

[BaeKJoon/C++] 백준 3059 c++ 등장하지 않는 문자의 합

반응형

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이다.

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

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에 등장하지 않는 알파벳 대문자의 아스키 코드 값의 합을 한 줄에 하나씩 출력한다.

예제 입력 1 복사

2
ABCDEFGHIJKLMNOPQRSTUVW
A

예제 출력 1 복사

267
1950

코드

#include <iostream>
#include <string>
 
using namespace std;
 
int main() {
 
    int test;
    cin>>test;
 
    for(int i=0; i<test; i++){
 
        string str;
        cin>>str;
 
        int len = str.length();
 
        int arr[26]={0};
        int cnt=0;
 
        for(int i=0; i<len; i++){
            cnt = str[i] - 65;  // A = 65 Z = 90
            arr[cnt]++;         // 문자열에서 쓴 문자는 = 1, 안쓴 문자는 = 0
        }
 
        int sum=0;
 
        for(int i=0; i<26; i++){
            if(arr[i]==0){
                sum+=i+65;      // 안쓴 문자들을 다 더한다.
            }
        }
        cout<<sum<<"\n";
    }
    return 0;
}
cs

 

반응형