본문 바로가기
백준 알고리즘 단계별 풀이 (문제 수)/문자열 (10)

[C++] 알파벳 찾기 : 10809번

by 17번 일개미 2022. 6. 26.
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