[백준 C] 10809 : 알파벳 찾기

anfruf·2022년 6월 14일

백준 C언어

목록 보기
47/62
  1. C언어 : 문자열(3)

15.JUN.2022

문제 : 문자열

알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 
있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 
프로그램을 작성하시오.

문제 풀이

#include <stdio.h>
#include <string.h> // strlen()사용 
int main()
{
	char arr[100]; // 단어 입력받기(최대 길이 제시되어 있음)
	scanf("%s", arr);

	int result[26]; // 알파벳이 있으면 index, 없으면 -1 저장
	for (int i = 0; i < 26; i++) { // -1로 초기화
		result[i] = -1;
	}

	for (char i = 'a'; i <= 'z'; i++) { // (1)
		for (int j = 0; j < strlen(arr); j++) { // (2)
			if (i == arr[j]) { // (3)
				if (result[i - 'a'] == -1){ // (4)
                	result[i - 'a'] = j;
                }
			}
		}
	}

	for (int i = 0; i < 26; i++) { // 알파벳 여부 출력
		printf("%d ", result[i]);
	}
}

(1)
알파벳 소문자 a~z를 돌기 위한 for문
(2)
0부터 단어의 길이만큼 index를 돌기 위한 for문
(3)
알파벳이 단어에 있다면 --> (4) 로 이동
(4)는 똑같은 알파벳이 있을 경우를 대비한 가정
result는 알파벳 순서대로 숫자를 담을 배열을 위에서 -1로 초기화한 배열이다.
index 부분에 i-'a'를 보자.
알파벳 소문자에서 -'a'를 하면 해당 알파벳 순서의 index가 된다.
예를 들어 보면, 'baekjoon'에는 'o'가 5번째, 6번째에 있다.(0부터 시작) 따라서 i=='o'라고 했을 때 (3) 부분에서 'o'==arr[5] 이므로 if문에 들어오고, (4)를 만난다. result[ i - 'a'] == -1 은 result 배열의 index i - 'a' 가 초기화 상태라면 숫자를 바꾸라는 뜻이다. 여기서 i == 'o'이므로 'o'-'a' , 즉 아스키 코드로 111-97=14의 값이 나오는데 14는 알파벳이 0으로 시작했을 때 'o' 순번이다. 이때 'o'는 처음 나오므로 숫자를 j(5)로 바꾸게 되고, 다음 순서로 2번째 'o'는 result의 숫자가 이미 바뀌어 있으므로 값을 바꾸지 않게 된다.

0개의 댓글