반응형
https://www.acmicpc.net/problem/10809
- 문제
해설
c - 문자가 최초로 등장한 인덱스를 저장할 cnt배열을 0으로 초기화시킨다.
문자가 최초 등장 시 문자열의 인덱스 번호 + 1로 저장한다.
cnt배열을 순회하면서 0일 경우 -1을, 아닐 경우는 값 - 1을 공백을 두고 출력한다.
cnt에 값을 저장할 때 + 1을 하지 않는다면?
문자의 최초 등장 인덱스가 0이라면 -1로 출력되는 문제가 발생한다.
c++ - s.find(n); 는 문자열 s에서 문자열 n이 최초로 등장하는 인덱스 번호를 반환해주는 함수이다.
만약 찾는 문자열이 없을 경우 string::npos를 반환한다.
npos의 값은 -1이지만 자료형이 unsigned이므로 int로 캐스팅 후 출력한다.
코드
c
#include <stdio.h>
#include <string.h>
int main() {
int cnt[26] = { 0 , };
char s[101];
scanf("%s", s);
for (int i = 0; i < strlen(s); i++) {
if (cnt[s[i] - 'a'] == 0) cnt[s[i] - 'a'] = i + 1;
}
for (int i = 0; i < 26; i++) {
if (cnt[i] == 0) printf("-1 ");
else printf("%d ", cnt[i] - 1);
}
return 0;
}
c++
#include <iostream>
#include <string>
using namespace std;
int main() {
int cnt[26] = { 0 , };
string s;
cin >> s;
for (char i = 'a'; i <= 'z'; i++) {
cout << (int)s.find(i) << ' ';
}
return 0;
}
반응형
'알고리즘 > 백준 문제 풀이' 카테고리의 다른 글
[BOJ/백준] 1157번 단어 공부 - [c/c++] 풀이 (0) | 2022.10.17 |
---|---|
[BOJ/백준] 2675번 문자열 반복 - [c/c++] 풀이 (1) | 2022.10.15 |
[BOJ/백준] 11720번 숫자의 합 - [c/c++] 풀이 (0) | 2022.10.14 |
[BOJ/백준] 11654번 아스키 코드 - [c/c++] 풀이 (0) | 2022.10.14 |
[BOJ/백준] 1065번 한수 - [c/c++] 풀이 (0) | 2022.10.13 |
댓글