Written by JS970
on
on
1181 - 단어 정렬
- 난이도: 실버 5
- 날짜: 2022년 10월 31일
- 상태: Correct
- 추가 검토 여부: Yes
solution
- 조건이 많은 문제였다.
- 조건 1 : 짧은 길이의 단어를 먼저 출력한다.
- 단어의 최대 길이가 50이었으므로, 1부터 50까지 반복하는 for문을 사용하여 출력할 때 단어의 길이가 짧은 것부터 출력하도록 하였다.
- 조건 2 : 길이가 같은 경우 알파벳 순으로 출력한다.
- 조건 2를 만족시키기 위해 set 컨테이너의 insert 메소드를 사용하였다.
- 조건 3 : 알파벳 소문자로 이루어진 단어만 출력한다.
- 조건 3을 만족시키기 위해 cctype헤더의 islower을 사용하였다.
- 조건 4 : 같은 단어가 여러번 입력되었을 경우 한번만 출력한다.
- 조건 4를 만족시키기 위해 set 컨테이너를 사용하였다.
- 위의 조건들에 대한 접근법이 모두 적절하여 정답을 출력했다.
- 문제 조건으로 미루어 이중 반복문을 사용해도 제한시간 안에 문제없이 동작할 것이라고 생각했다.
- 하지만 이 방법은 세련되지 못한 방법인 것 같다.
- 추후 다른 문제풀이 방법을 생각해 보는 것이 좋을 것 같다.
code
#include <iostream>
#include <cctype>
#include <string>
#include <set>
using namespace std;
int main()
{
int itr;
string str;
cin >> itr;
set<string> strs;
set<string>::iterator iter;
bool check = true;
// check and add to container if string is only consist of lowercase alphabet
for(int i = 0; i < itr; i ++)
{
cin >> str;
check = true;
for(int i = 0; i < str.length(); i++)
{
if(!islower(str[i]))
{
check = false;
break;
}
}
if(check) strs.insert(str);
}
// print container
for (int i = 1; i <= 50; i++)
{
for(iter = strs.begin(); iter != strs.end(); iter++)
if(iter->length() == i)
cout << *iter << endl;
}
return 0;
}
ref
- cctype 헤더파일
- set 컨테이너