BAEKJOON/구현
백준 10809번 [알파벳 찾기](C++)-yes6686- 티스토리
yes6686
2023. 12. 20. 20:24
728x90
반응형
SMALL
백준 문제 풀이: 10809 [알파벳 찾기]
문제 링크: https://www.acmicpc.net/problem/10809
문제 설명:
알파벳 소문자로만 이루어진 단어가 주어졌을 때, 각 알파벳이 단어에서 처음 등장하는 위치를 구하는 프로그램을 작성하세요. 만약 단어에 포함되지 않은 알파벳이 있다면 -1을 출력합니다.
입력 조건:
- 첫째 줄에 알파벳 소문자로만 이루어진 단어가 주어진다. 단어의 길이는 100을 넘지 않는다.
출력 조건:
- 각 알파벳에 대해 단어에서 처음 등장하는 위치를 공백으로 구분하여 출력한다. 단어의 첫 번째 글자는 0번째 위치이다.
문제 해결 코드
#include <iostream>
#include <string>
using namespace std;
int main() {
// 알파벳 26개의 위치를 저장하는 배열
int arr[26];
fill_n(arr, 26, -1); // 모든 값을 -1로 초기화
string s;
cin >> s; // 단어 입력
// 문자열 순회
for (int i = 0; i < s.size(); i++) {
int index = s[i] - 'a'; // 알파벳의 인덱스 계산
if (arr[index] == -1) {
arr[index] = i; // 해당 알파벳의 첫 등장 위치 저장
}
}
// 결과 출력
for (int i = 0; i < 26; i++) {
cout << arr[i] << ' ';
}
cout << endl;
return 0; // 프로그램 정상 종료
}
코드 설명
위 코드는 입력받은 문자열에서 알파벳 소문자의 위치를 효율적으로 찾습니다.
- 배열 초기화: `arr` 배열은 알파벳 소문자의 위치를 저장하며, 초기값은 -1로 설정합니다. 이는 해당 알파벳이 등장하지 않았음을 나타냅니다.
- 문자열 탐색:
- `s[i] - 'a'`를 이용하여 알파벳의 인덱스를 계산합니다.
- 각 알파벳의 첫 등장 위치만 저장하기 위해 배열 값이 -1일 때만 갱신합니다.
- 출력: 배열의 값을 순서대로 출력하며, 각 값은 공백으로 구분됩니다.
시간 복잡도 분석:
- 문자열 길이를 N이라 할 때, 문자열 탐색은 O(N).
- 출력은 26개의 알파벳에 대해 상수 시간이 소요되므로 O(1).
따라서 전체 시간 복잡도는 O(N)입니다.
결과
다음은 입력 예시와 출력 결과입니다:
입력:
baekjoon
출력:
1 0 -1 -1 4 -1 -1 -1 6 -1 -1 -1 -1 -1 -1 5 -1 -1 3 2 -1 -1 -1 -1 -1 -1
다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!
728x90
반응형
LIST