백준 웹사이트 "10809번 - 알파벳 찾기" 문제풀이입니다.
언어는 C언어입니다. (제출 언어: C99)
문제
소스 코드
#include <stdio.h>
#include <string.h>
int main(void){
char S[100];
scanf("%s", S);
int position[26];
for(int i=0; i<26; i++){
position[i] = -1;
}
for(int j=0; j<strlen(S); j++){
char alphabet = S[j];
//printf("alphabet: %c\n", alphabet);
if(position[alphabet-'a'] == -1)
position[alphabet-'a'] = j;
else
continue; //break를 쓰면 for문 종료
}
for(int k=0; k<26; k++){
printf("%d ", position[k]);
}
}
문제 풀이
Line 5, 6에서는 주어진 단어 S를 입력받습니다. 이때 문제 조건 중, 단어의 길이가 100을 넘지 않는 조건이 있기에 배열의 길이를 100으로 지정하면 충분합니다.
Line 8 ~ 11은 각 알파벳의 위치를 저장할 배열을 선언 및 초기화합니다. 알파벳의 개수가 배열의 크기가 되며, 알파벳이 단어에 나타나지 않을 경우 '-1'이라는 값을 가지도록 모든 배열 값을 '-1'로 초기화합니다.
Line 13 ~ 21에서 각각의 알파벳이 처음으로 나타나는 위치를 저장해주는 작업을 진행합니다. 이때 크기 100의 배열인 S를 모두 보지 않고, 입력 문자열의 크기만큼 보고 싶기 때문에 'strlen'함수를 이용하며, 이를 위해 Line 2의 <string.h>를 추가합니다. Line 17, 18에서 alphabet-'a'
를 이용하는데, 이는 11720번 문제의 numbers[i]-'0'
과 같은 원리입니다. 'position' 배열에서 인덱스 0에 해당하는 알파벳을 'a', 1에 해당하는 알파벳을 'b' 등등으로 만들기 위해 'a'에 해당하는 아스키 코드 만큼 빼주면 충분합니다. 또한, 각 알파벳이 처음 나타나는 위치만 기록하고 싶기 때문에, '-1'일 경우에만 배열의 값을 바꿔줍니다. 만약 -1이 아니라면, 앞 어딘가에서 값이 바뀐 전적이 있다는 것이므로, 넘어가줘도 괜찮습니다. 아래는 백준 웹사이트 "11720번 - 숫자의 합" 문제풀이 링크입니다.
마지막으로 Line 23에서 'position' 배열을 출력하면 원하는 정답을 얻게 됩니다.
'코딩 > 백준 BOJ' 카테고리의 다른 글
[백준/C언어] 1157번 - 단어 공부 (0) | 2022.01.10 |
---|---|
[백준/C언어] 2675번 - 문자열 반복 (0) | 2022.01.09 |
[백준/C언어] 11720번 - 숫자의 합 (0) | 2022.01.07 |
[백준/C언어] 11654번 - 아스키 코드 (0) | 2022.01.07 |
[백준/C언어] 1065번 - 한수 (0) | 2022.01.06 |