본문 바로가기

문과 코린이의, [C. C++] 기록/C++ 백준 문제풀이

[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 알파벳 찾기 (10809)

반응형

[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 알파벳 찾기 (10809)

[문과 코린이의 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;
}
반응형