- 문제 URL
- 문제 요구사항
- 접근 방법
- 풀이 순서
- 소스코드
- 문제 풀이 결과
문제 URL
문제 요구사항
- 첫째 줄에 단어의 개수 n과, 단어의 위치 k가 공백을 두고 주어진다.
- 둘째 줄부터 n줄 동안 단어가 주어진다.
- 단어는 영어 소문자로 이루어진 1 이상 100 이하의 길이를 가진 영단어 이다.
- 섞여 있는 단어를 정렬하고, k번째 위치해 있는 단어를 출력하시오.
- 단어 정렬 기준은 길이가 짧을수록 앞에 있고, 길이가 같다면, 사전 순으로 정렬하도록 한다.
접근 방법
- 문자열, 정렬 문제로 algorithm 라이브러리의 sort 함수에 greater 옵션 값을 사용자 함수로 줘서 문제에 맞게 정렬하여 해당 k위치의 인덱스 값을 출력하면 된다.
풀이 순서
- 단어의 개수 n과 단어의 위치 k를 입력 받는다.
- for문을 n만큼 돌며 단어를 입력 받아 벡터에 저장한다.
- sort 수행
- 문자열 길이를 기준으로 내림차순 정렬한다.
- 만약, 길이가 같다면, a < b (문자열은 부등호를 이용해 사전순 정렬이 가능하다.)로 return 한다.
- 결과값에 벡터의 k -1 (k는 1부터 시작하므로) 값을 대입한다.
- 결과값 출력
소스코드
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool comp(string a, string b) {
if (a.length() == b.length()) {
return a < b;
}
return a.length() < b.length();
}
int main() {
int n, target;
cin >> n >> target;
string result = "";
vector<string> string_arr;
for (int i = 1; i <= n; i++) {
string str;
cin >> str;
string_arr.push_back(str);
}
sort(string_arr.begin(), string_arr.end(), comp);
result = string_arr[target - 1];
cout << result;
return 0;
}
문제 풀이 결과
