문제 링크: https://www.acmicpc.net/problem/10809
10809번: 알파벳 찾기
각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출
www.acmicpc.net
1. 이 문제에 접근하기 위해 필요한것
- 아스키코드 사용
- 주어진 배열의 0이 아닌 다른 수로 초기화 방법
- strlen 함수사용
2. 이 문제에 접근할때 처음에 틀렸었는데 틀린 코드를 제시하겠다.
#include <stdio.h>
#include <string.h>
int main(void) {
char a[101];
int alpa[26];
for(int i=0 ; i<26 ; i++)
{
alpa[i] = -1 ;
}
scanf("%s",a);
int len = strlen(a);
for(int i=0 ; i<len ; i++)
{
int temp = a[i]-97;
for(int j=0 ; j<26 ; j++)
{
if(j==temp)
{
alpa[j]=i;
// 알파벳이 반복되어 나올때 가장 마지막 수의 위치가 출력되어
// 주어진 조건에 위배된다.(조건: 처음음 등장하는 위치를 공백으로 구분해서 출력한다.)
}
}
}
for(int i=0 ; i<26 ; i++)
{
printf("%d ",alpa[i]);
}
return 0;
}
3. 수정된풀이(정답코드)
#include <stdio.h>
#include <string.h>
int main(void) {
char a[101];
int alpa[26]; // 알파벳 26개
// 배열 alpa를 -1로 모두 초기화
for(int i=0 ; i<26 ; i++)
{
alpa[i] = -1 ;
}
scanf("%s",a);
// 배열의 길이 구하는 함수 strlen
int len = strlen(a);
// for문 이용
for(int i=0 ; i<len ; i++)
{
int temp = a[i]-97;
// 입력된 소문자의 아스키코드에 -97을 빼면
// temp는 alpa의 index값이 저장된다고 생각하면된다.
if(alpa[temp]==-1)
// 위에서 모든 alpa 값 -1로 초기화 했으니..
// 이 조건 덕분에 중복 문자가 나오더라도
// 첫번째 문자 위치만 출력됨!
{
alpa[temp] = i; // i는 입력된 문자의 index값(위치)이다.
}
}
for(int i=0 ; i<26 ; i++)
{
printf("%d ",alpa[i]);
}
return 0;
}
<느낀점>
- 조금 생각이 필요한 문제였다.
'백준 문제 정리' 카테고리의 다른 글
백준 2439 별 찍기 - 2 (C언어) (0) | 2023.09.16 |
---|---|
백준 10989 수 정렬하기 3 (C언어) (0) | 2023.09.10 |
백준 1152 단어의 개수 (C언어) (0) | 2023.09.03 |
백준 11718번 그대로 출력하기 (C언어) (0) | 2023.09.02 |
백준 2743 단어 길이 재기 (C언어) (0) | 2023.09.02 |