반응형
SMALL
이 문제도 역시나 문자열 처리하는 문제입니다.
저는 해싱으로 문제를 풀어봤습니다. 전체적인 알파벳들의 처음 위치만 기록하면 되기 때문에 해싱으로 바로 접근하여서 O(n)을 노렸습니다.
배열 인덱스로 97을 뺏었는데 그렇게 하면 보기 안 좋으니 'a'로 해줘도 됩니다.
그리고 word의 '\0' 문자를 만났을 때 break를 안 걸면 쓰레기값을 참조하여서 틀린 답을 뱉어냅니다. 그러니 추가적인 조건으로 '\0' 문자를 만났을 땐 처리를 해줘야합니다.
#include <stdio.h>
int main(void) {
char word[101];
int arr[101];
for (int i = 0; i < 101; ++i) {
arr[i] = -1;
}
scanf("%s", word);
for (int i = 0; i < 101; ++i) {
if (word[i] == '\0') break;
else if (arr[word[i] - 'a'] == -1) {
arr[word[i] - 'a'] = i; // 이 부분을 97로 안 빼고 'a'로 빼고 처리해도 되더군요
}
}
char alphabet[] = "abcdefghijklmnopqrstuvwxyz";
for (int i = 0; i < 26; ++i) {
if (arr[alphabet[i] - 'a'] != -1) {
printf("%d ", arr[alphabet[i] - 'a']);
}
else {
printf("-1 ");
}
}
}
반응형
LIST
'알고리즘 문제 풀이 > Baekjoon' 카테고리의 다른 글
11052 - 카드 구매하기 (0) | 2019.08.12 |
---|---|
5622 - 다이얼 (0) | 2019.08.11 |
11720 - 숫자의 합 (C) (0) | 2019.08.11 |
미로 탐색 - 2178 (C++) (0) | 2019.06.28 |
팩토리얼 - 10872 (C) (0) | 2019.06.22 |