728x90
문제
알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.
풀이
#include <iostream>
using namespace std;
int main()
{
string s; int result[26] = {0, }; // 단어 s 와 결과배열
cin >> s;
// 결과 배열 -1로 초기화
for (int i = 0; i < 26; i++)
{
result[i] = -1;
}
for (char i = 'a'; i <= 'z'; i++)
{
int idx = i - 'a'; // 결과 배열의 인덱스는 0~25
for(int j = 0; j < s.size(); j++)
{
if (s[j] == i) // a~z사이의 알파벳이 있으면
{
result[idx] = j; // 결과배열의 해당 알파벳 위치(인덱스)에
break; // 현재 위치 j를 저장
}
}
}
for (int i = 0; i < 26; i++) // 결과값 출력
{
cout << result[i] << ' ';
}
}
로직은 이렇다.
1. 문자열을 입력받는다.
2. 알파벳 a ~ z 까지 하나씩 문자열 s 의 i번째 요소와 비교한다.
3. s[i] 가 a ~ z 중 등장한다면 현재 위치 i 를 result 배열에 저장한다.
생각보다 간단한 문제지만, 문자열을 string이 아닌 char 배열로 선언했을 때 배열의 사이즈에 주의해야한다.
또한, 결과를 저장할 result배열의 초기화를 해주어야 쓰레기값으로 인한 오류가 발생하지 않는다.
728x90
'백준 알고리즘 단계별 풀이 (문제 수) > 문자열 (10)' 카테고리의 다른 글
[C++] 단어의 갯수 : 1152번 (0) | 2022.07.03 |
---|---|
[C++] 단어 공부(가장 많은 알파벳 찾기) : 1157번 (0) | 2022.07.02 |
[C++] 문자열 반복 / 단어 재조합하기 : 2675번 (0) | 2022.06.28 |
[C++] 문자형 숫자의 합 : 11720번 (0) | 2022.06.26 |
[C++] 아스키코드 : 11654번 (0) | 2022.06.26 |