<문제 링크>
https://www.acmicpc.net/problem/10809
10809번: 알파벳 찾기
각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출
www.acmicpc.net
내가 처음 제출한 코드
#include <stdio.h>
int main() {
char S[100];
scanf("%s", &S);
int num[26];
for (int k = 0; k < 26; k++) {
num[k] = -1;
}
for (int i = 0; i < sizeof(S); i++) {
if (num[S[i]-'a'] == -1) {
num[S[i]-'a'] = i;
}
}
for (int j = 0; j < 26; j++) {
printf("%d ", num[j]);
}
}
이게 비주얼스튜디오에서는 멀쩡하게 구동되고 예제랑 출력도 똑같이 되는데 왜인지 자꾸 틀렸다.
아무리 자세히 살펴봐도 틀린 곳이 없는데 자꾸 틀렸다고!!!!!
다른 사람들의 코드를 구글링 하다가 혹시나 싶어 배열 S를 0으로 초기화 하는 코드를 넣었더니 해결됐다
char S[100]={0,}; 이렇게!
별 것 아닌 부분인 것 같은데 왜 이것때문에 틀렸는지 보기 위해 scanf로 입력값을 받은 직후 배열 S의 상태를 확인해봤다.
baekjoon\0뒤를 보면 랜덤 값(-52)이 들어가 있다. 이것 때문에 틀렸다고 판단된 것 같다.
교훈 : 배열 초기화를 잘 하자
<정답 코드>
#include <stdio.h>
int main() {
char S[100]={0,};
scanf("%s", &S);
int num[26];
for (int k = 0; k < 26; k++) {
num[k] = -1;
}
for (int i = 0; i < sizeof(S); i++) {
if (num[S[i]-'a'] == -1) {
num[S[i]-'a'] = i;
}
}
for (int j = 0; j < 26; j++) {
printf("%d ", num[j]);
}
}
아래 코드도 정답이다. 처음 작성했던것인데 사실 상 같은 내용이다. num배열의 인덱스만 달라졌다. 이것 때문에 틀린 줄 알고... 사실 배열 초기화 때문이었다.
#include <stdio.h>
int main() {
char S[100]={0,};
scanf("%s", &S);
int num[123];
for (int k = 0; k < 123; k++) {
num[k] = -1;
}
for (int i = 0; i < 100; i++) {
if (num[S[i]] == -1) {
num[S[i]] = i;
}
}
for (int j = 97; j < 123; j++) {
printf("%d ", num[j]);
}
}
'프로그래밍 > C' 카테고리의 다른 글
[백준_1152] 단어의 개수 (0) | 2022.03.01 |
---|---|
[백준_11720] 숫자의 합 (0) | 2022.02.26 |
[백준_2577] 숫자의 개수(배열 0으로 초기화) (0) | 2022.02.20 |
[백준_10951] A+B - 4 (EOF) (0) | 2022.02.17 |