문제 출처: algospot.com/judge/problem/read/LECTURE
1. 코드
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
int main(void)
{
int t;
cin >> t;
while (t--)
{
string a;
cin >> a;
vector <string> b;
for (int i = 0; i < a.length(); i += 2)
{
string temp(1, a[i]);
temp += a[i + 1];
b.push_back(temp);
}
sort(b.begin(), b.end());
for (int i = 0; i < b.size(); i++)
cout << b[i];
cout << endl;
}
}
2. 풀이
문제를 읽어보면 입력한 문장에서 2단어씩 나눈 다음 그것을 오름차순으로 정리한 후 출력하는 문제이다. 그래서 문장을 입력받고 2단어씩 쪼개어 한 문장으로 합친 후 vector에 저장하여 정렬 후 출력을 하였다.
int t;
cin >> t;
while (t--)
테스트 케이스 횟수를 입력받고 입력받은 수 만큼 반복한다.
string a; //문장 입력
cin >> a;
vector <string> b; //결과 저장
입력받을 문자을 저장할 a와 결과를 저장할 b를 선언하고 a에 문장을 입력받는다.
for (int i = 0; i < a.length(); i += 2) //2단어씩 묶어서 벡터에 저장
{
string temp(1, a[i]); //첫 번째 단어 문자열로 저장
temp += a[i + 1]; //두 번째 단어 추가
b.push_back(temp); //2단어를 문장으로 벡터에 저장
}
반복문을 이용하여 입력한 두 단어를 문자열로서 vector b에 저장한다.
sort(b.begin(), b.end()); //오름차순 정렬
for (int i = 0; i < b.size(); i++) //출력
cout << b[i];
cout << endl;
그리고 sort를 이용하여 b에 저장되어 있는 값들을 오름차순으로 정렬을 한 뒤 전부 출력하면 정답이다.
'컴퓨터 > 알고스팟 알고리즘' 카테고리의 다른 글
알고스팟 알고리즘: MISPELL [C++] (0) | 2021.05.07 |
---|---|
알고스팟 알고리즘: ENCRYPT [C++] (0) | 2021.05.06 |
알고스팟 알고리즘: DRAWRECT [C++] (0) | 2021.05.04 |
알고스팟 알고리즘: ENDIANS [C++] (0) | 2021.05.03 |
알고스팟 알고리즘: MERCY [C++] (0) | 2021.05.02 |