728x90
programmers.co.kr/learn/courses/30/lessons/12915?language=cpp
C++ 문자열 | 정렬
문자열의 특정 인덱스의 값을 기준으로 정렬하라는 문제
접근 방법
C++ STL의 sort함수 인자로 내가 정의한 compare함수를 전달해서 풀었다.
compare함수 안에서는 해당 인덱스의 문자 값이 같을때는 문자열 전체를 비교해서 리턴하고
같지 않은 경우는 그냥 인덱스의 문자 값을 비교했다.
sort에서 compare 오랜만에 써봐서 헷갈렸던 점
- compare 함수가 true를 반환하면 정렬하지 않는다. (이미 그렇게 정렬되어 있음)
- compare 함수가 false를 반환하면 정렬한다.
따라서 내가 정렬하고자 하는 기준에 맞으면 true를 리턴하고 아니라면 false를 리턴하면 된다.
string.compare() 헷갈렸던 점
- a.compare(b) 에서
a < b 이면 -1 => 사전순
a == b 이면 0
a > b 이면 1
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
int m;
bool mycompare(string s1, string s2){
if(s1[m] == s2[m]){
return s1.compare(s2) < 0 ;
}else{
return s1[m]<s2[m];
}
}
vector<string> solution(vector<string> strings, int n) {
m = n;
vector<string> answer = strings;
sort(answer.begin(), answer.end(), mycompare);
return answer;
}
* 56분 걸린 변명
처음엔 정렬함수 자체를 정의해서 풀려고 했지만 같은 값이 여러개일 때도 처리를 해줘야해서
compare함수를 쓰는게 더 좋겠다고 생각했다.
그래서 java로 풀어보려고 했지만 comparator 재정의하고 오버라이딩 하는 과정을
IDE가 아니라 프로그래머스 상에서 하려니까 너무 낯설어서..자바 책을 다시 봐야겠다는 것을 깨닫고 다시 C++로 돌아왔다.
728x90
'알고리즘 문제풀이' 카테고리의 다른 글
[프로그래머스] 알고리즘 75일차 : 문자열을 정수로 바꾸기 (0) | 2021.01.29 |
---|---|
[프로그래머스] 알고리즘 75일차 : 수박수박수박수박수박수? (0) | 2021.01.29 |
[프로그래머스] 알고리즘 73일차 : 3진법 뒤집기 (0) | 2021.01.27 |
[프로그래머스] 알고리즘 72일차 : 소수 찾기 (0) | 2021.01.26 |
[프로그래머스] 알고리즘 71일차 : 신규 아이디 추천 (0) | 2021.01.25 |