10809번: 알파벳 찾기
각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출
www.acmicpc.net
#include <iostream>
#include <string>
using namespace std;
int main() {
int alpha[26] = { 0, };
int visited[26] = { 0, };
string S;
cin >> S;
for (int i = 0; i < S.length(); i++) {
char cur = S.at(i); //S의 i번째 알파벳
int cur_int = (int)cur - 97; //알파벳a == 숫자0 으로 계산
if (!visited[cur_int]) {
visited[cur_int] = 1;
alpha[cur_int] = i;
}
}
for (int i = 0; i < 26; i++) {
if (!visited[i])
alpha[i] = -1;
cout << alpha[i] << ' ';
}
return 0;
}
[문제 풀이 생각 과정]
1. a~z까지 모든 알파벳의 위치를 출력해야되니까 - alpha[26] 배열을 만들었다.
예) string S의 알파벳 a 위치는 alpha[]배열의 0번째에 저장됨
-- 이를 위해서 a의 아스키코드인 97만큼 빼줌! //int cur_int = (int)cur - 97;
2. 예)baekjoon 처럼 같은 알파벳이 연속해서 나올 경우에 처음 위치로 출력됨 - 방문 배열 (visited[26])로 체크했다.
visited[]==0이면 방문체크하고 alpha[]배열에 위치를 저장하는걸로!
마지막 결과 출력할 때에도 이용했다 - visited[]==0이면 -1로 저장 후 출력하는 걸로!
이전에 alpha[26] 배열을 이용해 문제를 풀었던 기억이 있어서 그런가 굉장히 쉽게 풀었다ㅎㅎ 기분이 너무 좋았땅
'1d-1c > BOJ' 카테고리의 다른 글
2908_상수 (C++) (0) | 2020.08.26 |
---|---|
1157_단어 공부 (C++) (0) | 2020.08.25 |
4673_셀프 넘버 (C++) (0) | 2020.08.24 |
8958_OX퀴즈 (C++) (0) | 2020.08.17 |
[백준] 1051_숫자정사각형 (Silver3) (C++) (0) | 2020.04.26 |