PS/백준

[백준/Baekjoon]<10809번> 알파벳 찾기 [C/C++/Python][Class 1]

DigIT_JHB 2022. 7. 12. 18:31

백준 10809번 알파벳 찾기

문제

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

입력

첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.

출력

각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다.

만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다. 단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다.

예제 입력 1

baekjoon

예제 출력 1

1 0 -1 -1 2 -1 -1 -1 -1 4 3 -1 -1 7 5 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1

 

#문제 풀이 방법

 

1. 100자 이하의 단어 S가 입력되면

2. 알파벳 abcdefg...총 26자에 대해서 각각 처음 등장하는 위치를 출력한다.

3. 알파벳이 포함되어있지 않으면 -1로 출력한다.

 4-1. C나 C++로 푸는 경우, 받은 S의 자릿수를 파악한다.

 5-1. 반복문을 사용하여 한자리씩 움직이면서, 그 자리의 알파벳이 처음 나왔는지 아닌지를 판단한다.(조건문)

 6-1. 처음 나왔으면 알파벳의 위치를 저장한다.

 

 또는

 

 4-2. C++이나 Python으로 푸는 경우 find함수를 이용하여 간편하게 푼다.

 

 

 

 

 

#C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    char str[100];
    scanf("%s",str);
    int len=strlen(str);//입력받은 문자열 개수 파악
    char abc[26]={};
    memset(abc,-1,sizeof(char)*26);//26자리 알파벳의 위치를 -1으로 모두 초기화 
    for(int i=0;i<len;i++)
    {
        if(abc[(int)(str[i]-'a')]==-1){//알파벳 처음 위치 파악되면
        	abc[(int)(str[i]-'a')]=(i);//알파벳 처음 위치를 저장
            }
    }
    for(int i=0;i<26;i++)
    {
        printf("%d ",abc[i]);//알파벳 위치 출력
    }

    return 0;
}

 

 

#C++

 'find 함수를 사용하면 되겠다'까지만 생각을 하고 그 이후는 진행하지 못하여 C++의 코드는 다른 분의 코드를 참고하였다.

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

 (특히, find함수는 없는 문자열을 찾으려 할 경우에는 string::npos가 반환된다. 

npos의 경우 -1의 static constant value를 가지며 type이 size_t인 값이다. size_t는 '부호 없는 정수 형식'이므로 이 형식에 대해 표현할 수 있는 가장 큰 값을 나타낸다. 따라서 int형으로 바꿔줘서 -1이 출력되도록 한다.)

 

 

 

#Python

char = input()
abc = list(range(97,123))  # 아스키코드 숫자 범위를 리스트로 저장

for x in abc :
    print(char.find(chr(x))) #chr함수는 아스키코드를 문자로 변경해준다. 그리고 알파벳 위치 출력, 없으면 -1 출력

(추가로, 아스키코드에서 a= 97이고 z= 122에 해당한다.)

 

 

반응형