Dolphins의 HelloWorld
Programmers level1 문자열 내 마음대로 정렬하기 본문
적당한 함수의 활용을 통해 적은 코드의 길이로 결과를 출력할 수 있는 문제이다.
문제를 읽어보면 vector에 있는 각 원소의 특정 인덱스를 비교하면서 정렬을 해야함을 알 수 있다. 고로 그냥 순수하게 정렬알고리즘을 구현하면 다음과같은 코드가 나온다.
#include <string> #include <vector> #include <algorithm> using namespace std; vector<string> solution(vector<string> strings, int n) { vector<string> answer; int len = strings.size(); for (int i = 0; i < len-1; i++) { for (int j = i + 1; j < len; j++) { if (strings[i][n] > strings[j][n]) swap(strings[i], strings[j]); else if (strings[i][n] == strings[j][n]) { if (strings[i] > strings[j]) swap(strings[i], strings[j]); } } } answer = strings; return answer; }
sort 함수를 사용하면 적은 줄로도 이 문제를 손쉽게 풀 수 있다.
핵심은 sort함수를 사용하기에 앞서 적절한 비교함수를 따로 작성해주어야 한다는 점이다.
이 함수 또한 인덱스에 있는 문자가 같다면 사전순으로,
다르다면 오름차순으로 정렬되게끔 해서 쉽게 구현할 수 있다.
참고로 비교함수에서 < 로 return이 되면 오름차순,
> 로 return 되면 내림차순이라는 것만 알면 쉽게 작성해서 사용할 수 있다.
#include <string> #include <vector> #include <algorithm> using namespace std; int i; bool compare(string x, string y) { return x[i] == y[i] ? x < y : x[i] < y[i]; } vector<string> solution(vector<string> strings, int n) { i = n; sort(strings.begin(),strings.end(),compare); return strings; }
'Algorithm > Programmers 문제풀이' 카테고리의 다른 글
Programmers > 카카오코드 예선 >카카오 프렌즈 컬러링북 (0) | 2018.08.17 |
---|---|
Programmers Level 2 올바른 괄호 (0) | 2018.08.07 |
Programmers Level 2 124나라의 숫자 (0) | 2018.08.06 |
Programmers Level 1 같은 숫자는 싫어 (0) | 2018.08.06 |
Programmers Level3 2xn 타일링 (0) | 2018.07.12 |
Comments