코딩테스트 연습 - 문자열 내 마음대로 정렬하기 | 프로그래머스 (programmers.co.kr)
코딩테스트 연습 - 문자열 내 마음대로 정렬하기
문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱
programmers.co.kr
어려웠던 점
대상이 되는 문자를 뽑고 그 문자의 인덱스 혹은 전체 글자도 같이 저장해야하지 않나? 라는 생각에
multimap을 이용해서 풀어야겠다 라고 생각했고
그렇게 iterator까지 하다가 잘 안되서 풀이 봄
찾아보니 sort와 cmp를 연습하는 문제라고 함..
compare() 함수를 만들어서 sort()의 세 번째 인자 값으로 넣게 되면, 해당 함수의 반환 값에 맞게 sort()가 실행된다. 이때 compare함수의 반환값을 어떻게 해야 오름차순이고 내림차순인지 헷갈릴 수 있다. 오른쪽이 왼쪽보다 크기때문에 오른쪽은 계속 크게 정렬될 것이다. 따라서 오름차순으로 정렬된다고 생각하면 외우기 편하다.
오름차순 : <
내림차순: >
내림차순: 왼쪽에 있는 것이 더 크도록 정렬하겠다
[Algorithm] sort() 함수 사용하기(feat. compare 이용하기 ) (tistory.com)
풀이
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int N;
bool mysort(string a, string b){
if(a.at(N)!=b.at(N)){
return a.at(N) < b.at(N); //N인덱스의 문자로 정렬
}else{
return a < b; //사전순으로 정렬
}
//return a.at(N)==b.at(N) ? a < b : a.at(N) < b.at(N);
}
vector<string> solution(vector<string> strings, int n) {
vector<string> answer;
answer = strings;
N = n;
sort(answer.begin(),answer.end(),mysort);
return answer;
}
'Algorithm > C++' 카테고리의 다른 글
[백준 1260] DFS와 BFS (0) | 2022.06.04 |
---|---|
그래프 (0) | 2022.06.03 |
[프로그래머스 lv1] 같은 숫자는 싫어 (0) | 2022.05.27 |
[프로그래머스 lv1] 문자열 내 p와 y의 개수 (0) | 2022.05.19 |
[프로그래머스 lv1] 서울에서 김서방 찾기 (0) | 2022.05.18 |
댓글