programming

[c++] 백준 10809

Mysteryu 2023. 5. 22. 22:12
//ascii a : 97

#include <iostream>
int main() {

	
	std::string s;
	std::cin >> s;

	int alpha[26];


	for (int i = 0; i < 26; i++) {
		alpha[i] = -1;
		for (int j = 0; j < s.length(); j++) {
			if (s[j] == char(i + 97) && alpha[i] == -1) {
				alpha[i] = j;
			}
		}
	}

	for (int k = 0; k < 26; k++) {
		std::cout << alpha[k] << " ";
	}
	std::cout << "\n";
	
}

위는 제출했던 코드

 

시간복잡도가 별로 좋지 않다고 생각했기 때문에 다른 분들의 코드를 참고한 결과 아래와 같게 수정할 수 있었다.

 

//ascii a : 97

#include <iostream>
int main() {

	
	std::string s;
	std::cin >> s;

	int alpha[26];

	for (int k = 0; k < 26; k++) {
		alpha[k] = -1;
	}

	for (int i = 0; i < s.length(); i++) {
		if(alpha[int(s[i]) - 97] == -1)
			alpha[int(s[i]) - 97] = i;
	}

	for (int j = 0; j < 26; j++) {
		std::cout << alpha[j] << " ";
	}
	std::cout << "\n";	
}

배열의 -1값과 출력을 위한 반복문을 제외한다면 이쪽 코드가 시간 복잡도가 더 좋은 것 같다