본문 바로가기

Language/C++

[C++][백준 10809][문자열] 알파벳 찾기 - 컴도리돌이

728x90

문제

  • 알파벳 소문자로만 이루어진 단어 S에서 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력한다.

  • 예를 들어 입력값이 abc이면, a는 0번째 위치 b는 1번째 위치, c는 2번째 위치이고 나머지 알파벳은 -1 값을 갖는다.

  • 중복된 값의 시작 위치를 주의하자


소스코드

#include<iostream>
#include<string>

using namespace std;

int main(void)
{
    string S; //입력 받을 문자열을 string으로 입력받음
    int arr[26]; // 알파벳 위치 값을 저장할 배열
    cin >> S;

    for(int i=0; i < 26; i++)
    {
        arr[i] = -1; //모든 알파벳 위치 값을 -1으로 초기화
    }
    for(int i=0; i < S.length(); i++)
    {
        if(arr[(int)S[i]-97]<0) arr[(int)S[i]-97] = i;
    //입력 받은 문자열의 시작 값에 대한 해당 알파벳 위치 값을 해당 index값으로 저장한다.
    //시작 위치만 적기 위해서 조건문으로 음수일 때만 시행.
    }
    for(int i = 0; i< 26; i++)
    {

        cout << arr[i] << " ";
    }
    return 0;

}

 

다른 분의 소스코드

#include <iostream>
#include <string>
using namespace std;
int main() {
    string s;
    string alphabet = "abcdefghijklmnopqrstuvwxyz";
    cin >> s;
    for(int i = 0; i < alphabet.length(); i++)
        cout << (int)s.find(alphabet[i]) << " ";
    return 0;
}

다른 블로그에서 더욱 쉽게 풀으셔서 갖고 왔다. 역시 C++을 잘 활용하기 위해서는 C++의 STL를 잘 쓸 줄 알아야 하는 거 같다. string의 멤버 함수인 find를 이용하여, 입력받은 문자열에 해당 알파벳의 위치 index를 반환하고 없을 경우 -1이 반환된다.