본문 바로가기
  • 기록
알고리즘

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

by juserh 2022. 2. 7.

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

 

10809번: 알파벳 찾기

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

www.acmicpc.net

문제 이해하기

소문자로만 이루어진 단어를 입력하면, 그 결과로 a부터 z까지의 알파벳이 단어에 처음 등장하는 위치를 출력한다. 만약 입력된 단어에 존재하지 않는다면 -1을 출력한다.

 

코드로 표현하기

1. 처음에 시도하고 틀린 코드.....

#include <iostream>

using namespace std;

int main() {
	int alpha[26]; //알파벳 a,b,c,d,,,,,,x,y,z
	char s[100];
	cin >> s;

	for (int i = 0; i < 26; i++) {
		alpha[i] = -1; //알파벳 배열의 값을 -1로 초기화
		for (int j = 0; j < 100; j++) {
			if ((int)s[j] == 97 + i) { //아스키코드로 비교
				alpha[i] = j;
				break;
			}	
		}
		cout << alpha[i] << " ";
	}
}

입력에 대한 결과는 올바르게 출력되었으나 백준 사이트에서 코드 제출하니 틀렸다고 떠서 어리둥절...

문제의 입력 부분 설명에 단어의 길이를 100으로 제한되어있길래 단어 s의 문자 배열의 길이를 100으로 두었다. 그래서 이 부분을 string 타입으로 바꾸니 맞았다.

 

2. 1번 코드에서 단어 string타입으로 바꿔서 성공한 코드....

 

#include <iostream>

using namespace std;

int main() {
	int alpha[26]; //알파벳 a,b,c,d,,,,,,x,y,z
	string s;
	cin >> s;

	for (int i = 0; i < 26; i++) {
		alpha[i] = -1;
		for (int j = 0; j < s.length(); j++) {
			if ((int)s[j] == 97 + i) {
				alpha[i] = j;
				break;
			}	
		}
		cout << alpha[i] << " ";
	}
}

입력받는 단어의 타입을 string으로 바꾸면서 for문에서 단어 읽을 때 조건도 s.length()로 바꾸었다.

 

3. string STL 사용하는 방법

#include <iostream>
#include <string>

using namespace std;

int main() {
	string s;
	string alphabet = "abcdefghijklmnopqrstuvwxyz";
	cin >> s;
	
	for (int i = 0; i < alphabet.length(); i++) {
		cout << (int)s.find(alphabet[i]) << " ";
	}
}

string STL 사용하면 아주 간단하게 풀 수 있었다는 점.....

string str="문자열";
str.find("찾고자 하는 문자");

위와 같은 방식으로 사용할 수 있다. find함수는 결과로 str문자열에서 인자로 준 문자(찾고자 하는 문자)를 찾아 해당 문자가 처음 나타나는 위치를 반환한다. 만약 존재하지 않다면 -1을 반환한다.

'알고리즘' 카테고리의 다른 글

[C++] 백준 2292번: 벌집  (0) 2022.02.25
[C++] 백준 1712번: 손익분기점  (0) 2022.02.25
[C++] 백준 11720번: 숫자의 합  (0) 2022.02.07
[C++] 백준 1546번: 평균  (0) 2022.01.29
[C++] 백준 1110번: 더하기 사이클  (0) 2022.01.28