백준 문제풀이/브론즈2

백준 10809번 - 알파벳 찾기

void_melody 2021. 11. 25. 13:08

https://www.acmicpc.net/problem/10809

 

10809번: 알파벳 찾기

각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출

www.acmicpc.net

#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main()
{
	std::cin.tie(NULL);
	std::ios::sync_with_stdio(false);

	string input;
	cin >> input;
	vector<int> v(26, -1);

	for (int i = 0; i < input.length(); i++)
	{
		int index = input[i] - 'a';
		if(v[index] == -1)
			v[index] = i;
	}
	for (int i = 0; i < 26; i++)
		cout << v[i] << " ";
	return 0;
}

각 알파벳의 위치를 담는 알파벳 배열 v를 선언했고 -1로 다 초기화해주었다. 아무것도 안하면 -1이니까.

string의 각 글자마다 접근해 -'a' 를 해줌으로써 간격이니 해당 순서만큼의 숫자고 이를 int형의 index로 저장한 다음

해당 알파벳 배열 v로 가서 해당 글자 index로 넣어주었다.

여기서 if(v[index] == -1)이 중요한데, 문제 조건이 처음 등장하는 위치를 나타냈기에,

처음 등장할 때 상태는 원상태인 -1이므로 이를 한번 바꿔주면 된다.

 

네이버 블로그 실수칸에 char을 int로 바꾸는 것에 적어두었다.

다시 간단히 말하면 - '해당 문자의 가장 작은 값'을 해주면 해당 간격만큼의 정수값이 나오고 이것이 우리가 원하는 값이겠지.