관리 메뉴

cococo-coding

3059번. 등장하지 않는 문자의 합 (c++풀이) 본문

[BOJ] 코드 모음/C++_learning 문제집

3059번. 등장하지 않는 문자의 합 (c++풀이)

_dani 2024. 1. 10. 18:02

문제

3059번: 등장하지 않는 문자의 합 (acmicpc.net)

풀이

1. 우선은 arr[26]={0,} 배열을 생성한다. 이 배열은 추후에 알파벳 개수를 카운팅하는 용도로 쓸 것이다.

 

2. string s를 입력받고, for문을 이용해 s[0]부터 끝 인덱스까지 65를 빼준다.

65를 빼주는 이유는 A의 아스키코드가 65이므로, A=0 B=1 이런식으로 계산을 편하게 하기 위해서이다.

 

3. (point) 그러면 앞에서 적은대로 A=0, B=1, ... Z=25가 된다. 이 값을 cnt 변수에 받는다.

그리고 처음에 arr배열에 인덱스로 cnt를 넣어주면 각 알파벳 별로 배열의 값이 증가하게 된다.

 

4. 이렇게 되면 arr배열에서 카운팅 된 애들은 1이상의 값을 갖게 되고, 카운팅 되지 못한 애들(문자열에 없는 애들)은 그대로 0의 값을 유지하게 된다. 이를 이용해서 for문으로 arr을 인덱스[0]부터 끝까지 돌려서 값이 0인애들을 sum에 더해준다.

 

5. 마지막으로 sum의 값을 출력한다. 

 


이렇게 알파벳과 관련된 문자열 문제는 배열을 하나 생성해서 카운팅하는 용도로 사용하면 편리하다.

아스키코드로 알파벳을 표현하는 문제가 많으므로, A=65 Z=90 이렇게 외워두자.

 

코드

#include <iostream>
using namespace std;

/*
    1. T를 입력받는다.
    2. T만큼 테스트 데이터S를 입력받는다.
    3. 각 문자열에서 등장하지 않는 알파벳 대문자를 찾는다.
    4. 등장하지 않는 알파벳 대문자의 합을 찾는다.
    5. 그 합을 출력한다.
*/

int main() {
    //1
    int t;
    cin >> t;

    // 2
    while(t--) {
        string s;
        cin >> s;

        //알파벳 대문자 배열arr 생성 
        int arr[26] = { 0, };
        int cnt = 0;

        //3
        for (int i = 0; i < s.size(); i++) {
             cnt= s[i] - 65;
             arr[cnt]++;
        }

        //4
        int sum = 0; 
        for (int j = 0; j < 26; j++) {
            if (arr[j] == 0) {
                sum += j + 65;
            }
        }

        //5
        cout << sum << endl;
    }
    return 0;
}