이 글은 Obsidian에서 마이그레이션되었으며, 그 과정에서 AI의 도움을 받았습니다. 오류나 누락된 내용이 있다면 댓글로 알려주세요!
문제
코딩테스트 연습 - 문자열 내 마음대로 정렬하기 | 프로그래머스 스쿨
풀이
아이디어
처음 문제를 봤을 때에는
- n번째 인덱스의 문자가 같을 경우
- 내림차순일 경우
이렇게 두가지의 경우로 나누어서 풀려고 그랬는데 코드가 뭔가 불필요하게 길어지고 이상하게 헷갈리고 그래서 다른 방법을 생각해보았다.
어떠한 특정한 기준이 주어지고, 그 기준을 갖고 정렬하는 문제이기 때문에 sort 함수를 사용하고 cmp 함수에다 그 기준을 구현해주면 간단하게 코드를 짤 수 있을 것 같았다.
bool cmp(string a, string b){if(a[idx] == b[idx])return(a < b);return(a[idx] < b[idx]);}
이렇게 n번째 인덱스가 같을 경우에는 사전 순서 기준으로 비교하고, 그 외의 경우에는 n번째 인덱스 순서 기준으로 비교하도록 cmp 함수를 구현해 준 다음에
sort(answer.begin(), answer.end(), cmp);
sort 함수를 이용해서 정렬해주었다.
코드
#include <string>#include <vector>#include <algorithm>using namespace std;int idx;bool cmp(string a, string b){if(a[idx] == b[idx])return(a < b);return(a[idx] < b[idx]);}vector<string> solution(vector<string> strings, int n) {vector<string> answer;answer.assign(strings.begin(), strings.end());idx = n;sort(answer.begin(), answer.end(), cmp);return answer;}
end