728x90
https://school.programmers.co.kr/learn/courses/30/lessons/12915
문자열 정렬기준을 마음대로 설정해보는 문제였다!
문제 자체는 간단했다.
편하게 풀려면 그냥 sort자체를 구현해주면 될것같고
나는 <algoritm> 헤더의 sort를 이용해줬다.
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int forn;
bool comp(string a, string b){
if(a[forn] < b[forn]){
return true;
}else if(a[forn] == b[forn]){
return a < b;
}
return false;
}
vector<string> solution(vector<string> strings, int n) {
vector<string> answer = strings;
forn = n;
sort(answer.begin(), answer.end(), comp);
return answer;
}
내가 커스텀한 compare함수의 인자는 정해져있기 때문에, n을 인자로 넘겨주는게 아니라 전역변수로 넘겨서 처리했다.
algorithm헤더의 sort함수는, 맨 마지막 인자를 설정해주지 않으면 자동으로 오름차순으로 정렬된다.
따로 커스텀한 compare를 적용해주고싶으면, 위와같이 bool을 리턴하는 compare함수를 직접 정의해서 넘겨주면 된다.
오늘도 미들러문제를 생각보다 쉽게풀어서 챌린저문제를 도전해봤다!
https://school.programmers.co.kr/learn/courses/30/lessons/81301
이 문제도 생각보다 쉬웠다ㅎㅎ
#include <string>
#include <vector>
#include <iostream>
#include <map>
using namespace std;
int solution(string s) {
int answer = 0;
map<string, int> numbers = {{"zero" , 0}, {"one" , 1}, {"two" , 2}, {"three" , 3} ,{"four" , 4}, {"five" , 5}, {"six" , 6}, {"seven" , 7}, {"eight" , 8}, {"nine" , 9}};
string str;
string temp;
for(int i = 0; i<s.size(); i++){
if(isdigit(s[i])){
str.push_back(s[i]);
continue;
}
temp.push_back(s[i]);
if ( numbers.find(temp) == numbers.end() ) {
} else {
// find
int tnum = numbers[temp];
char tchar = '0' + tnum;
str.push_back(tchar);
temp.clear();
}
}
answer = stoi(str);
return answer;
}
일단, 문자열별로 어떤 숫자로 매칭되는지 나와있으니까 hash를 이용할 수 있었다!
나는 Map이 있어서 그냥 그걸로 사용했다.
hash_map 헤더를 이용하면 hash를 이용할 수 있지만,, 그냥 익숙한걸로 사용했다ㅋㅋㅋ
아무튼, 주어진 문자열을 하나씩 탐색하면서 숫자가 나오면 건너뛰고, 문자열이 나오면 대응되는 숫자로 변경해나가면서 진행했다.
마지막에는 이렇게 바꾼 문자열을 stoi함수를 이용해 변경해주기만 하면 되었다!
728x90
'코테준비 > 하루한개도전~' 카테고리의 다른 글
99클럽 코테 스터디 4일차 TIL : JadenCase 문자열 만들기 (0) | 2024.07.25 |
---|---|
7/24 TIL : 완전탐색 (1) | 2024.07.25 |
7/23 TIL : 완전탐색 (2) | 2024.07.24 |
99클럽 코테 스터디 2일차 TIL : x만큼 간격이 있는 n개의 숫자, (0) | 2024.07.23 |
7/22 TIL : 완전탐색 (5) | 2024.07.23 |