반응형
Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
05-19 00:03
관리 메뉴

ImJay

[C언어] 백준 10809번 : 알파벳 찾기 본문

백준 - C, C++/07. 문자열

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

ImJay 2020. 10. 15. 00:00
반응형

백준 10809번 : 알파벳 찾기

- 사용언어 : C언어

www.acmicpc.net/problem/10809

1. 문제

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

2. 코드

#include <stdio.h>

int main(void) {
    
    char S[101];
    
    scanf("%s", S);
    
    for(int ascii = 97; ascii < 123; ascii++) {
    	int count = 0;
    	for(int i=0; S[i]!=NULL; i++) {
    		if( S[i] == ascii ) {
    			printf("%d ", i);
    			count++;
    			break;
    		}
    	}
    	if(count == 0) printf("-1 ");
    }
}

3. 풀이

일단, 제 부족한 머릿속에서 나온 코드이기 때문에 매우 비효율적이고, 더럽다는 점 참고해주세요..

 

다 풀고 다른 분들 코드 보는데 훨씬 효율적으로 짤 수 있더라구요.. 저는 그냥 .. ㅠㅠ.

 

배열 S가 101이어야 하는 이유는 ?

 

>>  문자열은 입력의 끝을 NULL로 구분하는데, 배열의 크기가 100일 경우, 문자의 입력을 100개하면 NULL이 입력되지 않기 때문에 문자의 끝을 알 수 없기 때문입니다. ( i < 100으로 할 경우, 만약 문자를 100개 미만으로 작성 시 입력되지 않은 값이 같이 출력되는 경우 때문 )

 

아스키코드 97 ~ 122 까지가 소문자 a ~ z 이기 때문에 변수 ascii로 범위를 지정해주었습니다.

 

문자열을 모두 비교하였을 때 알파벳이 포함되어 있지 않다면 -1을 출력해주기 위해 count로 구분해주었습니다.

 

반응형
Comments