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을 리턴하는 구조이다.
잘만 사용한다면 문자열에서 특정 문자를 찾는데 간결한 코드를 만들 수가 있는 장점이 있다
'프로그래밍 ( Programming ) > 백준 알고리즘 (BaekJoon Algorithm)' 카테고리의 다른 글
1157번 - 단어 공부 ( 백준 알고리즘/C++ ) (2) | 2020.12.14 |
---|---|
2675번 - 문자열 반복 ( 백준 알고리즘/C++ ) (0) | 2020.12.12 |
11720번 - 숫자의 합 ( 백준 알고리즘/C ) (0) | 2020.12.10 |
11653번 - 아스키 코드 ( 백준 알고리즘/C++ ) (0) | 2020.12.09 |
1065번 - 한수 ( 백준 알고리즘/c++ ) (0) | 2020.12.07 |
댓글