6단계 - 10809번
10809번: 알파벳 찾기
각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출
www.acmicpc.net
문제점
1. a부터 z까지 각각 처음으로 등장하는 위치 혹은 등장하지 않는다면 -1 로 저장하는 alphabet[26] 이라는 배열을 설정
그리고 for(int i)와 for(int j)로 시작하는 반복문 안에서 if (word[j]==i) 인 경우에는 각각의 알파벳이 처음 등장한 위치저장,
아닌 경우(즉 word[j] 와 i 가 같지 않은 경우)에는 else로 처리하며 alphabet 배열에 -1을 저장하려했으나 너무 복잡함
-> alphabet 배열을 모두 -1로 채우는 반복문을 최초에 실행하도록 수정
2. int j 로 시작하는 반복문의 판단조건을 word[j] != '0'으로 설정
-> 대부분의 문자열은 가장 마지막 저장으로 NULL을 저장한다는 것에서 착안했던 아이디어
-> 하지만 '0'이 아닌 word[j] != NULL로 설정해야 제대로 입력된 문자열의 가장 마지막을 판단해낼 수 있음
3. if (word[j]==i) 인 경우 해당 alphabet 배열에다가 j 값에 해당하는 값을 넣으려함
이때 j값을 넣게될 배열이, 해당 alphabet의 몇번째 배열인지를 어떤 식으로 표현할지가 가장 고민했던 부분
-> 이전 문제들에서 아스키코드를 활용했던 방법에서 착안하여, alphabet 배열중에서 [word[j] - 'a'] 번째에 j 값을 넣도록 작성
풀이
#include <stdio.h>
int main(void)
{
int alphabet[26];
char word[100];
scanf("%s", word);
for (int i = 0; i < 26; i++)
{
alphabet[i] = -1;
}
for (int i = 'a'; i<='z'; i++)
{
for (int j = 0; word[j] != NULL; j++)
{
if (word[j] == i)
{
alphabet[word[j] - 'a'] = j;
break;
}
}
}
for (int i = 0; i<26; i++)
{
printf("%d ", alphabet[i]);
}
return 0;
}
'백준(C언어) > 22년 7월' 카테고리의 다른 글
7월 22일(금), 23일(토) - 6단계(1157번 *실패->성공) (0) | 2022.07.22 |
---|---|
7월 21일(목) - 6단계(2675번) (0) | 2022.07.21 |
7월 19일(화) - 6단계(11720번) (0) | 2022.07.20 |
7월 18일(월) - 4단계(4344번) (0) | 2022.07.18 |
7월 17일(일) - 4단계(8958번) (0) | 2022.07.17 |
댓글