Mentoring

[멘토링][c언어] 백준 10809번 : 알파벳 찾기 (포인터 사용)

seomj 2020. 6. 3. 20:40

#include <stdio.h>
#include <string.h>

int main() {
	char arr[100];
	char al[26];
	char *p = arr;
	char *q = al;
	int x = 0;

	scanf_s("%s", arr, 100);

	for (int i = 0; i < 26; i++) {
		*(q+i) = -1;
	}
	for (int i = 'a'; i <= 'z'; i++) {
		for (int j = 0; j < strlen(arr); j++) {
			if (*(p+j) == i) {
				x = *(p + j) - 'a';
				*(q+x) = j;
				break;
			}
		}
	}
	for (int i = 0; i < 26; i++) {
		printf("%d ", *(q+i));
	}
	return 0;
}

입력받은 문자열을 저장해줄 arr 배열을 선언해준다.

알파벳의 위치를 출력해줄 al 배열을 선언해준다.

포인터를 사용하여 풀기 위해 각각 포인터 변수를 선언해주었다.

 

scanf로 문자열을 입력받은 뒤 for문에서 al 배열에 -1 값을 모두 저장시킨다.

 

다음 for문에서 'a'와 'z' 사이의 알파벳들을 변수에 저장해놓고 입력받은 문자열만큼 비교를 해준다. 알파벳과 문자열이 일치할 경우에는 해당 알파벳에서 'a'를 빼준 값을 변수 x에 저장해준다. 'a'를 빼주는 이유는 아스키코드 값이 나오기 때문에 빼주어 0~25의 숫자가 나오도록 하기 위함이다. 그 결과를 x에 저장하는 것이다. x를 이용하여 al 배열에 해당하는 위치에 j 값을 넣어준다.

break는 현재 반복중인 반복문을 끝낸다. break를 사용하여 j에 대한 반복문을 끝내는 것인데 이것을 끝내주어야 처음 등장하는 위치를 표시해주게 된다.

 

마지막 for문을 통해 al 배열을 출력한다.