본문 바로가기

알고리즘 문제 풀이/Baekjoon

10809 - 알파벳 찾기

반응형
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