반응형

[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 알파벳 찾기 (10809)
10809번: 알파벳 찾기
각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출
www.acmicpc.net
[ 문제 ]
알파벳 소문자로만 이루어진 단어 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 |