코딩/백준 문제 (브론즈)

[백준/10809/C언어] 알파벳 찾기 _ 풀이

룻밤 2023. 8. 11. 13:33

https://www.acmicpc.net/problem/10809

 

10809번: 알파벳 찾기

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

www.acmicpc.net


풀이

#include <stdio.h>

int main() {
	char s[101];		// 단어s는 최대 100자(널문자 포함 101)
	int alp[26] = {};	// 알파벳이 어느위치에 있는지를 저장한 배열
	int i, j; 
	scanf("%s", s);
	
    // ★
	for (i = 0; i < 26; i++)	// 위치를 -1로 초기화
		alp[i] = -1;

	for (j = 'a'; j <= 'z'; j++){		// a~z까지 위치 찾기
		i = 0;							// i=0으로 초기화
		while (s[i] != '\0') {			// 단어s가 널문자를 만날때까지 반복
			if (s[i] == (char)j) {		// s[i]가 알파벳j와 같을때
				alp[j - 97] = i;		// alp배열에 i위치를 저장
				break;					// break로 빠져나옴
			}
			i++;
		}
	}
	for (i = 0; i < 26; i++) {
		printf("%d ", alp[i]);		// 공백으로 구분해서 출력
	}

	return 0;
}

필자는 처음에 주석으로 별 처리된 부분의

while문을 상위에 for문을 하위에 둬, 문제에서 요구하는

"단어에 포함되어 있는 경우에는 처음 등장하는 위치를" 부분을 충족시키지 못했다.

 

그렇기에 for문(알파벳을 기준으로)을 상위에 while문(위치를 탐색한다)을 하위에 두고

break; 를 통해 빠져나가서 요구하는 바를 충족했다.