문제
알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.
출력
각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다.
만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다. 단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다.
#include <iostream>
#include <string>
using namespace std;
int main() {
string str;
cin >> str;
int alphaArr[26];
for (int i = 0; i < 26; i++) {
alphaArr[i] = -1;
}
for (int j = 0; j < str.length(); j++) {
if (alphaArr[str[j] - 'a'] == -1) {
alphaArr[str[j] - 'a'] = j;
}
}
for (int k = 0; k < 26; k++) {
cout << alphaArr[k] << " ";
}
cout << endl;
}
아마 많은 나같은 초보자들이 어떻게 '몇번째의 알파벳'에 대해 접근하는 것이 어려웠을것이다.
일단 string으로 input값을 받아주고, 알파벳이 총 26개이므로, -1로 초기화된 26사이즈의 배열을 만들어준다.
그리고 input값의 0(배열의 처음시작은 0)번째 알파벳이 b라고 하면, 'b' - 'a'는 1이된다.(ASCII 연산)
따라서 26개의 -1이 있는 배열에 0번째는 1이되는것이다.
정말 헷갈릴수도 있고 처음엔 이해가 잘 안갈것이다.
말보단 위코드를 보고 이해해보고, 아스키 연산이 이해가 가지 않는다면, 아스키표를 참고하는것이 좋겠다.
'PS > 백준' 카테고리의 다른 글
백준 / String(문자열) / 1157번 / 단어 공부 / C++ (0) | 2020.05.27 |
---|---|
백준 / String(문자열) / 2675번 / 문자열 반복 / C++ (0) | 2020.05.27 |
백준 / String(문자열) / 11720번 / 숫자의 합 / C++ (0) | 2020.05.26 |
백준 / 10951번 / A+B - 4 / C++ (0) | 2020.05.16 |