코딩/백준

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

rivermoon 2022. 10. 2. 21:42

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

소문자로 된 단어들에서 A~Z까지의 알파벳이 처음 등장하는 위치를 공백으로 구분하여 출력합니다.

알파벳이 단어에 없는 경우, -1을 출력합니다.

 

예제 입력

baekjoon

예제 출력

1 0 -1 -1 2 -1 -1 -1 -1 4 3 -1 -1 7 5 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1

 

해결 방법

char 자료형을 이용하여 문자를 저장할 때, char ch = 'A'와 같이 보이는 것으로는 문자 자체를 저장한다고 생각 할 수 있지만, 실제로는 그 문자에 대응하는 아스키 코드를 저장합니다. A의 아스키 코드는 65이므로, ch 변수에는 정수 65가 저장된다고 생각하면 편합니다. 이 개념을 이용하여 해결할 것입니다.

 

코드

#include <stdio.h>

int main()
{
	char str[100], pos;
	scanf("%s", str);
	
	for (int asc = 'a'; asc <= 'z'; asc++){
    /* 문자를 저장하는 것이 아닌, 문자에 대응하는 아스키 코드(정수)를 저장하므로 int 자료형에
    문자를 대입할 수 있습니다. 자주 쓰게 될 것이므로 기억합시다. */
		pos = 0; // 배열의 첫 번째부터 건드릴 것이므로, 0으로 초기화합니다.
		while (str[pos] != NULL){  
			if (str[pos] == (char) asc) break; 
			pos++; 
		}
		if (str[pos] == (char)asc) printf("%d ", pos);
		else printf("-1 ");	
	}
}

코드가 작동하는 방식은 다음과 같습니다.

(a를 str[100] = baekjoon에서 찾는다고 가정합니다.)

pos = 0으로 초기화하고, str[pos]와 같이 사용합니다.

 

str[0]은 b, a와 다르므로     pos++를 이용하여 pos에 1을 더하여 1로 만들어줍니다.

str[1]은 a, a와 같으므로     break 문을 이용하여 반복문에서 빠져나오고, (알파벳이 발견된)현재 위치를 출력합니다.

 

만일 찾지 못한 경우, 단어의 어느 위치의 글자도 알파벳과 같지 않은 것이니

if문은 늘 거짓이 될 것이므로 -1을 출력하게 됩니다.

 

이 과정을 a부터 z까지 반복합니다.

 

'코딩 > 백준' 카테고리의 다른 글

[백준][C] 1152. 단어의 개수  (1) 2022.10.03
[백준][C] 2675. 문자열 반복  (0) 2022.10.03
[백준][C] 11720. 숫자의 합  (0) 2022.10.02
[백준][C] 11654. 아스키 코드  (0) 2022.10.02
[백준][C] 4344. 평균은 넘겠지  (0) 2022.10.02