#29. [백준_C언어] 10809 : 알파벳 찾기

 

 입력 코드 

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

main() {
	char S[100];
	int num[26];
	int i, j;

	scanf("%s", S);

	for (i = 0; i < 26; i++) {
		num[i] = -1;
	}

	for (i = 'a'; i <= 'z'; i++) {
		for (j = 0; j < strlen(S); j++) {
			if (i == S[j]) {
				num[S[j] - 'a'] = j;
				break;
			}
		}
	}

	for (i = 0; i < 26; i++){
		printf("%d ", num[i]);
	}
}

 

 코드 설명 

#배열 #배열 초기화 #반복문 #조건문 #아스키코드

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

main() {
	char S[100];
	int i = 0;

	while (S[i]!='\0') {
		scanf("%s", &S[i]);
	}

	for (i = 0; i < strlen(S); i++) {
		if (S[i] >= '97' && S[i] <= '122')
			printf("%d ", i);
	}
}

처음에는 아스키코드를 이용해서 푸는 문제인 줄 알고 저렇게 했는데 저렇게 하면 그냥 a~z 중에서 있는 문자들의 인덱스가 입력된 문자열 순서대로 출력된다. a~z 순서대로 출력되는 게 아니라.

 

그래서 새로운 배열을 만들어서 모든 값을 -1로 초기화하려고 했지만 배열의 자동 초기화 문법은 0만 가능하다고 한다.

참고한 사이트

m.blog.naver.com/tipsware/221315173287

 

배열 초기화에 대한 이야기

: C 언어 관련 전체 목차 http://blog.naver.com/tipsware/221010831969 1. 좀 더 편해지고 안전해진 배열...

blog.naver.com

어쨌든 그래서 반복문으로 배열을 -1로 초기화했다. 

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

main() {
	char S[100];
	int num[26];
	int i, j;

	scanf("%s", S);

	for (i = 0; i < 26; i++) {
		num[i] = -1;
	}

	for (i = 'a'; i <= 'z'; i++) {
		for (j = 0; j < strlen(S); j++) {
			if (i == S[j]) {
				num[S[j] - 'a'] = j;
				break;
			}
		}
	}

	for (i = 0; i < 26; i++){
		printf("%d ", num[i]);
	}
}

num 배열이 a~z까지 알파벳이 있는지 확인하는 배열이고, S 배열이 단어 S를 입력받는 배열이다.

 

i='a'부터 i='z'까지 단어 S에 있는지 차례대로 확인하면서 있으면 num 배열에 j를 대입한다.

(각각의 알파벳에 대해서 처음 등장하는 위치를 출력해야 하므로)

 

예를 들어 baekjoon에서 a는 인덱스가 1이지만 num 배열로 들어갈 때는 인덱스가 0이어야 한다. 즉, num 배열로 들어갈 때에는 알파벳 순서로 들어간다.

 

따라서 num 배열의 인덱스는 각각 S[j] (단어 S의 j번째 문자) -'a' (아스키코드 97)이다.

예를 들어 baekjoon에서 k를 넣는다면 S[j] = S[3] = k이고 k는 아스키코드 107이지만 'k' - 'a' (107 - 97 = 10)를 함으로써 num[10]에 k의 인덱스였던 3이 들어가는 것이다. (num[10] = 3)

 

 

그리고 마지막에 출력할 때 num 배열을 출력하는 것이다.

 

참고한 사이트

travelerfootprint.tistory.com/24

 

백준 알고리즘 10809번: 알파벳 찾기 C언어

문제 출처: www.acmicpc.net/problem/10809 10809번: 알파벳 찾기 각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만

travelerfootprint.tistory.com

 

 

 문제 출처 

www.acmicpc.net/problem/10809

 

10809번: 알파벳 찾기

각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출

www.acmicpc.net