반응형
[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 알파벳 찾기 (10809)
[ 문제 ]
알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.
[ 입력 ]
첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.
[ 출력 ]
각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다.
만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다. 단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다.
[ 코드 1 ]
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
string S; // 단어 S
cin >> S;
int alpa[26]; // 알파벳 26 (위치저장소)
fill_n(alpa, 26, -1); // fill_n(std헤더파일에 있음) : -1로 초기화 방법
// int alpa[26] = {-1}; : 배열 첫번째 원소만 -1로 만들고 나머지 지정하지 않은 원소는 다 0으로 초기화해라
for (int i = 0; i < S.length(); i++)
{
if (alpa[S[i] - 'a'] == -1)
{
alpa[S[i] - 'a'] = i;
}
}
for (int i = 0; i < 26; i++)
{
cout << alpa[i] << ' ';
}
return 0;
}
[ 코드 2 ]
#include<iostream>
#include<algorithm> // find 함수
using namespace std;
int main() {
string S; // 단어 S
cin >> S;
for (int i = 'a'; i < 'z'; i++)
{
auto it = find(S.begin(), S.end(), i);
// find : 범위 안의 원소들 중 val과 일치하는 첫 번째 원소를 가리키는 반복자를 리턴한다.
// find(원소의 시작(begin은 포함), 원소의 끝(end는 포함 x), 비교할 값)
// val의 타입 T의 경우, operator==가 정의되어 있어야한다.
// 일치하는 원소가 없을 경우 last가 리턴된다.
if (it == S.end())
{
cout << -1 << ' ';
}
else
{
cout << (it - S.begin()) << ' ';
// 반환받은 반복자를 시작 반환자인 begin()을 빼줌으로서 위치(인덱스)를 구할 수 있다.
}
}
return 0;
}
반응형
'문과 코린이의, [C. C++] 기록 > C++ 백준 문제풀이' 카테고리의 다른 글
[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - ROT13 (11655) (0) | 2021.07.29 |
---|---|
[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 단어 길이 재기 (2743) (0) | 2021.07.29 |
[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 알파벳 개수 (10808) (0) | 2021.07.29 |
[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 후위 표기식 (1918) (0) | 2021.07.29 |
[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 후위 표기식2 (1935) (0) | 2021.07.27 |