백준 10809번
https://www.acmicpc.net/problem/10809
10809번: 알파벳 찾기
각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출
www.acmicpc.net
1. 문제
알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.
2. 내가 작성한 알고리즘
#include <stdio.h>
#pragma warning (disable:4996)
#include <string.h>
int main() {
int i;
int j=0;
int al = 0;
char arr[26];
for (i = 97; i <= 122; i++) { //아스키 코드를 이용하여 알파벳을 배열에 저장
arr[j] = (char)i;
j+=1;
}
char input[100];
scanf("%s", input); //입력 받음
for (i = 0; i <= 26; i++) {
int count = 0;
for (int k = 0; k < strlen(input); k++) {
if (arr[i] == input[k]) { // 일력받은 배열과 알파벳을 저장한 배열을 비교
count += 1;
al = k;
break;
}
}
if (count > 0) {
printf("%d",al );
}
if (count == 0) {
printf("-1");
}
printf(" ");
}
return 0;
}
3. 이번 알고리즘을 통해 느낀 점
이번 알고리즘은 알파벳 중심으로 돌아간다. 그러하기 때문에 알파벳 배열을 우선적으로 두고 조건문을 돌려야 된다.
문자열은 배열을 사용하면 하나 하나씩 빼서 사용할 수 있다.
<string.h> 과 strlen 을 통해 입력한 문자열의 길이를 알 수 있다.
알파벳과 같은 긴 문자가 필요할 때는 하나씩 치는 것보다 아스키 코드를 이용해 저장하는 것이 더 좋다.
'C > 백준 알고리즘 (c언어)' 카테고리의 다른 글
문자열 practice 04_단어의 개수 (0) | 2021.07.09 |
---|---|
문자열 practice 02_단어 공부 (0) | 2021.07.07 |
함수 practice 02_한수 (0) | 2021.07.01 |
함수 practice 01_셀프 넘버 (0) | 2021.07.01 |
1차원배열 practice 03_OX퀴즈 (0) | 2021.06.30 |