더보기
- [ 문제 ]
문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 [sun, bed, car]이고 n이 1이면 각 단어의 인덱스 1의 문자 u, e, a로 strings를 정렬합니다.
제한 조건
- strings는 길이 1 이상, 50이하인 배열입니다.
- strings의 원소는 소문자 알파벳으로 이루어져 있습니다.
- strings의 원소는 길이 1 이상, 100이하인 문자열입니다.
- 모든 strings의 원소의 길이는 n보다 큽니다.
- 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.
간단해보이는 문자열 리스트를 사전순으로 오름차순으로 정렬하는 문제였습니다.
다만 조건을 잘 읽고 그 부분을 처리해주는 것에 주의를 바라는 문제인 것 같습니다.
- My Code
#include <string>
#include <vector>
using namespace std;
vector<string> solution(vector<string> strings, int n) {
vector<string> answer;
vector<char> alphas;
char ctmp;
string stmp = "";
for(int i = 0 ; i < strings.size(); i++)
alphas.push_back(strings[i][n]);
for(int i = 0 ; i < alphas.size()-1; i++)
{
for(int j = 0 ; j < alphas.size()-1;j++)
{
if(alphas[j] > alphas[j+1])
{
ctmp = alphas[j];
alphas[j] = alphas[j+1];
alphas[j+1] = ctmp;
stmp = strings[j];
strings[j] = strings[j+1];
strings[j+1] = stmp;
}
else if(alphas[j] == alphas[j+1])
{
if(strings[j].compare(strings[j+1]) > 0)
{
stmp = strings[j];
strings[j] = strings[j+1];
strings[j+1] = stmp;
ctmp = alphas[j];
alphas[j] = alphas[j+1];
alphas[j+1] = ctmp;
}
}
}
}
answer = strings;
return answer;
}
- Best Code
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int i;
bool compare (string a, string b) {
return a[i] == b[i] ? a < b : a[i] < b[i];
// 두 문자열중에 먼저 i번째 문자를 사전순으로 비교하고 같을 경우, 문자열 자체를 비교
}
vector<string> solution(vector<string> strings, int n) {
i = n;
sort (strings.begin(), strings.end(), compare); // sort 함수에 default인자가 아닌 정의한 함수를 인자값으로 넘기는 것이 포인트
return strings;
}
- [ CheckPoint ]
- sort( ) 함수를 매우 잘 쓴 경우라 볼 수 있다.
- 나는 아직 C++ STL사용에 익숙하지 않아서인지, 버블정렬을 문자열에 반영해서 정렬 시켰다.
코드가 매우 길어지고 비 효율적이라는 생각이 들었다. - 리턴값이 boolean 형태의 compare함수를 따로 정의해서 sort( ) 함수의 인자 값으로 전달하는 매우 간단한
저 방식을 기억하자. - sort( ) 함수는 기본형식이 sort( 시작위치 , 끝위치, default정렬옵션 ) 이다.
저 마지막 인자위치에 본인이 따로 정의한 함수를 인자값으로 넣어도 적용된다.
아직까지 본 것으론 bool 형태의 compare함수가 가장 대표적인것 같다.
728x90
반응형
'Algorithm Practice > [ 프로그래머스 ]' 카테고리의 다른 글
[ 프로그래머스 ] [ #12943 ] 콜라츠 추측 (0) | 2020.09.08 |
---|---|
[ 프로그래머스 ] [ #12926 ] 시저 암호 (0) | 2020.09.08 |
[ 프로그래머스 ] [ #12903 ] 가운데 글자가져오기 (0) | 2020.09.06 |
[ 프로그래머스 ] [ #42748 ] K번째 수 (0) | 2020.09.04 |
[ 프로그래머스 ] [ #12906 ] 같은 숫자는 싫어 (0) | 2020.09.03 |