티스토리 뷰
문제.
알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.
입출력.
첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.
각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다.
단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다.
방법.
알파벳 개수는 총 52개이므로, 단어에 포함되어 있는 여부를 확인하기위한 용도로 52개의 요소를 가지는 배열을 만든다. 그리고 일단 -1로 모든 값을 초기화하고 fstrlen함수를 사용해 단어의 길이를 구한다. 그리고 for문을 단어 길이만큼 반복하면서 알파벳 위치에 해당하는 요소에 초기화한다. 같은 문자가 있는 경우, 첫번째 사용된 위치만 저장하므로 if문으로 -1인지를 확인해야 한다.
#include <stdio.h>
#include <string.h>
int main(){
char str[100];
scanf("%s", str);
int arr[26];
int n;
//배열 초기화
for(int i=0; i<26; i++){
arr[i] = -1;
}
//알파벳 위치 확인
for(int i=0; i<strlen(str); i++){
n = str[i]-'a';
if(arr[n]==-1) arr[n]=i;
}
//결과 출력
for(int i=0; i<26; i++){
printf("%d ",arr[i]);
}
return 0;
}
Insight.
7단계의 두 번째 문제는 최근에 풀었어서 세 번째 문제로 넘어왔다. 두 번째 문제 푼 방법 보니까 또 생소하다. 숫자로 입력을 받지 않고 문자로 받아서 풀었었네. 문자 공부하던 시기에 풀었어서 활용을 잘했었던 것 같다.
이번 문제는 첫 번째 위치라는 내용을 확인하지 못했어서 맞는 거 같은데 계속 틀리다고 해서, 왜 틀렸는지를 한참 고민했다. 첫 번째 위치 수정하고 나서도 틀리다고 해서 보니까 중간에 확인용 출력 함수를 그대로 둬서..ㅎ.... 앞으로는 문제 숙지도 좀 더 제대로하고, 필요 없는 코드는 바로바로 지우면서 풀어야겠다..
'Computer Science > 백준 알고리즘' 카테고리의 다른 글
[백준-JAVA] 1차원 배열 (0) | 2021.03.08 |
---|---|
[백준.02675-C언어] 문자열 반복 (0) | 2021.03.07 |
[백준.11654-C언어] 아스키 코드 (0) | 2021.03.06 |
[백준.01065-C언어] 한수 (0) | 2021.03.05 |
[백준.03309-C언어] 네 번째 점 (0) | 2021.03.04 |