smooth waters run deep

1d-1c/BOJ

10809_알파벳 찾기 (C++)

yeon_11 2020. 8. 25. 15:52
 

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