-
△ - [ 구현 ] 문자열 재정렬 - R알고리즘/이코테 - 기출 2021. 10. 13. 20:30
난이도 : 하 풀이시간 : 20/16 시간제한 : 1초 기출 : Facebook 인터뷰
[ 구현 ] 08 문자열 재정렬
알파벳 대문자와 숫자(0 ~ 9)로만 구성된 문자열이 입력으로 주어집니다. 이때 모든 알파벳을 오름차순으로 정렬하여
이어서 출력한 뒤에, 그 뒤에 모든 숫자를 더한 값을 이어서 출력합니다.
예를 들어 K1KA5CB7 이라는 값이 들어오면 ABCKK13을 출력합니다.
:: 입력 조건
첫째 줄에 하나의 문자열 S가 주어집니다. (1 <= S의 길이 <= 10,000)
:: 출력 조건
첫째 줄에 문제에서 요구하는 정답을 출력합니다.
아이디어
1. 문자열을 입력받아서 숫자는 따로 더하고 문자는 벡터에 넣음
2. 벡터 정렬을 이용해서 알파벳을 오름차순으로 정렬
3. 벡터의 알파벳을 순서대로 출력하고 숫자가 있는 경우 합계를 마지막에 출력해줌
내 코드
#include <iostream> #include <vector> #include <algorithm> #include <queue> #include <string> #include <cctype> using namespace std; int main() { string s; cin >> s; vector<char> ss; int sum = 0; for (int i = 0; i < s.length(); i++) { if (isdigit(s[i])) { sum += (s[i]-'0'); }else ss.push_back(s[i]); } sort(ss.begin(), ss.end()); for (int i = 0; i < ss.size(); i++) { printf("%C", ss[i]); }printf("%d", sum); }
정답 코드
#include <bits/stdc++.h> using namespace std; string str; vector<char> result; int value = 0; int main(void) { cin >> str; // 문자를 하나씩 확인하며 for (int i = 0; i < str.size(); i++) { // 알파벳인 경우 결과 리스트에 삽입 if (isalpha(str[i])) { result.push_back(str[i]); } // 숫자는 따로 더하기 else { value += str[i] - '0'; } } // 알파벳을 오름차순으로 정렬 sort(result.begin(), result.end()); // 알파벳을 차례대로 출력 for (int i = 0; i < result.size(); i++) { cout << result[i]; } // 숫자가 하나라도 존재하는 경우 가장 뒤에 출력 if (value != 0) cout << value; cout << '\n'; }
리뷰
테스트 코드는 다 통과해서 생각 못했던건데
지금보니까 내 코드에서는 sum이 0이면 문자열 뒤에 0이 붙게 됨
sum 이 0인지 아닌지 확인하는 코드를 추가해서 0이면 덧붙이지 않도록 고쳐야 할 듯
'알고리즘 > 이코테 - 기출' 카테고리의 다른 글
O - [ 구현 ] 뱀 - R (0) 2021.10.14 X - [ 구현 ] 문자열 압축 - R - r (0) 2021.10.13 O - [ 구현 ] 럭키 스트레이트 - R (0) 2021.10.13 X - [ 그리디 ] 무지의 먹방 라이브 - R (0) 2021.10.06 O - [ 그리디 ] 볼링공 고르기 - R (0) 2021.10.06