September 7, 2021
알파벳 대문자와 숫자(0~9)로만 구성된 문자열이 입력으로 주어집니다. 이때 모든 알파벳을 오름차순으로 정렬하여 이어서 출력한 뒤에, 그 뒤에 모든 숫자를 더한 값을 이어서 출력합니다.
예를 들어, K1KA5CB7이라는 값이 들어오면 ABCKK13을 출력합니다.
1초
128MB
첫째 줄에 하나의 문자열 S가 주어집니다. (1≤S의 길이≤10,000)
첫째 줄에 문제에서 요구하는 정답을 출력합니다.
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
int number;
vector<char> character;
int main() {
char tmpChar;
scanf("%c", &tmpChar);
while (tmpChar != '\\n')
{
if (tmpChar >= 'A' && tmpChar <= 'Z') {
character.push_back(tmpChar);
} else {
number += tmpChar - '0';
}
scanf("%c", &tmpChar);
}
sort(character.begin(), character.end());
for (int i = 0; i < character.size(); ++i) {
printf("%c", character[i]);
}
printf("%d", number);
return 0;
}
from curses.ascii import isdigit
S = input()
resultStr = ""
sum = 0
for character in S:
if (isdigit(character)):
sum += int(character)
else:
resultStr += character
print("".join(sorted(resultStr)) + str(sum))
문자를 차례대로 입력받으며 A~Z는 벡터에 삽입하고, 숫자는 값을 더한다. 작업이 완료되면 벡터를 정렬하고 출력한 후 숫자를 출력한다.
이 풀이는 벡터의 정렬 시간에 의존한다. 따라서 시간 복잡도는 O(nlgn)이다.