본문 바로가기

컴퓨터/알고스팟 알고리즘

알고스팟: LECTURE [C++]

문제 출처: algospot.com/judge/problem/read/LECTURE

 

algospot.com :: LECTURE

Lecture Note 문제 정보 문제 Professor Lew teaches Algorithm course in Sonyusi University (소녀시대학교). It is his first year as a professor, so he spends a lot of time making lecture notes. He'll teach recursion and sorting algorithms in the n

algospot.com

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에 저장되어 있는 값들을 오름차순으로 정렬을 한 뒤 전부 출력하면 정답이다.