본문 바로가기
프로그래밍 ( Programming )/백준 알고리즘 (BaekJoon Algorithm)

10809번 - 알파벳 찾기 ( 백준 알고리즘/C++ )

by Jayce_choi 2020. 12. 11.
반응형
 

10809번: 알파벳 찾기

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

www.acmicpc.net

문제 : 알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.

 

입력 : 첫째 줄에 단어 S가 주어진다.   

단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.

 

출력 : 각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치,... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다.

만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다. 단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다.

 

 


1 번째 코드 

#include<iostream>
#include<string.h>
using namespace std;
int main()
{
	char word[100];
	int  key = 0;;
	char alphabet[] = "abcdefghijklmnopqrstuvwxyz";
	cin >> word;
	for (int i = 0;i < strlen(alphabet);i++)
	{
		for (int j = 0;j < strlen(word);j++)
		{
			if (alphabet[i] == word[j])
			{
				cout << j << " ";
				key = 0;
				break;
			}
			else 
				key = 1;
		}
		if (key == 1)
			cout << "-1 ";
	}
	return 0;
}

2번째 코드

#include <iostream>
#include <string>
using namespace std;
int main() {
	string input;
	string alphabet = "abcdefghijklmnopqrstuvwxyz";
	cin >> input;
	for (int i = 0; i < alphabet.length(); i++)
		cout << (int)input.find(alphabet[i]) << " ";

	return 0;
}
중요 포인트

- 입력된 문자열의 각 자리에 알파벳과 비교를 위한 전체 알파벳 배열 선언 필요 (abcdefgabcdefghijklmnopqrstuvwxyz)
- 반복문을 실행하면서 동일한 알파벳이 발견했을때 출력과 break문을 이용한 탈출
- 발견이 안될시에는 반복문이 종료된 후에 조건을 만들어서 -1과 공백 출력 

코드 해설

입력된 문자열과 미리 선언되어있는 문자열끼리의 자리 비교를 하는 문제이다.
첫 번째 코드 같은 경우는 세세하게 풀어 적었으며
두 번째 코드 같은 경우는 string STL을 활용하여 좀 더 간소화된 코드로 구성할 수 있었다. 

string의 find 멤버함수의 기능은 다음과 같다. 

   string str = "아무 문자열";
   str.find("원하는 문자 혹은 문자열" , startIndex); 

str에서 원하는 문자가 있을때는 str에서 해당되는 위치를 반환해주며 없을때는 -1을 리턴하는 구조이다.

잘만 사용한다면 문자열에서 특정 문자를 찾는데 간결한 코드를 만들 수가 있는 장점이 있다

반응형

댓글