[ 숫자 문자열과 영단어 ] : < LV1 / 5286명 >
더보기
#include <string>
#include <vector>
using namespace std;
void ReplaceAll(string& text, string pattern, string replace)
{
int pos = 0, offset = 0;
while(true)
{
pos = text.find(pattern, offset);
if(pos == string::npos)
break;
//
text.replace(text.begin() + pos,
text.begin() + pos + pattern.size(),
replace);
offset = pos + replace.size();
}
}
int solution(string s)
{
int answer = 0;
//
string val = s;
vector v = {"zero", "one", "two", "three", "four",
"five", "six", "seven", "eight", "nine"};
//
for(int i = 0; i < v.size(); ++i)
ReplaceAll(val, v[i], to_string(i));
//
answer = stoi(val);
//
return answer;
}
# string, replace, replaceAll
[ 1주차 ] : < LV1 / 6494명 >
더보기
using namespace std;
long long solution(int price, int money, int count)
{
long long answer = 0;
//
long long cost = 0, m = money, c = count;
//
for(int i = 1; i < count+1; ++i)
cost += price * i;
//
answer = cost - money;
if(answer < 0)
answer = 0;
//
return answer;
}
# 반환값 자료형 int -> longlong
[ 2주차 ] : < LV1 / 3729명 >
더보기
#include <string>
#include <vector>
#include <algorithm> // sort
using namespace std;
string solution(vector<vector<int>> scores)
{
string answer = "";
//
float score;
int selfScore, sum;
char grade;
//
int count = scores.size();
for(int i = 0; i < count; ++i)
{
// 변수 초기화
score = selfScore = sum = grade = 0;
// 개인 점수 종합
vector<int> v;
for(int j = 0; j < count; ++j)
v.push_back(scores[j][i]);
// 본인 평가 분리
selfScore = v[i];
v.erase(v.begin() + i);
/* 평균 점수 계산 */
// 총점
for(int score : v)
sum += score;
// 최고점, 최저점
sort(v.begin(), v.end());
int min = *v.begin();
int max = *(v.end()-1);
// 유일한 최고점 or 유일한 최저점이 아니면
if(min <= selfScore && selfScore <= max)
score = ((float)(sum + selfScore) / count);
else
score = ((float)sum / (count - 1));
// 평점 -> 학점 변환
if(score >= 90.0f)
grade = 'A';
else if(score >= 80.0f)
grade = 'B';
else if(score >= 70.0f)
grade = 'C';
else if(score >= 50.0f)
grade = 'D';
else
grade = 'F';
//
answer += grade;
}
//
return answer;
}
# vector.erase() 사용법 2가지 : 단일(iterater), 범위(beginIndex(이상), endIndex(미만))
# vector.end() iterator는 null이므로 마지막 값을 얻으려면 '-1'
[ 4주차 ] : < LV1 / 2173명 >
더보기
#include <string>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
//===============================================//
typedef pair<string, int> si;
//===============================================//
bool cmp(const si& a, const si& b)
{
if(a.second == b.second)
return a.first < b.first;
//
return a.second > b.second;
}
//===============================================//
string solution(vector<string> table, vector<string> languages, vector<int> preference)
{
string answer = "";
// 계산된 결과를 저장할 map(언어이름 : key, 점수 : value)
map<string, int> result;
for(string s : table)
{
// table string을 ' ' 단위로 분해, vector에 저장
vector<string> v;
while(!s.empty())
{
string tmp = s.substr(0, s.find(' '));
s.erase(0, tmp.length() + 1);
//
v.push_back(tmp);
}
// map에 언어별 점수 입력
map<string, int> jobScore;
int max = v.size() - 1;
for(int i = 0; i < max; ++i)
jobScore[v[i+1]] = max - i;
// 사용언어 점수조회 & 선호도 계산
for(int i = 0; i < languages.size(); ++i)
{
int langValue = 0;
if(jobScore.count(languages[i]) != 0)
langValue = jobScore[languages[i]];
// 직업군별 계산된 결과 저장
result[v[0]] += langValue * preference[i];
}
}
// 고득점 순으로 정렬(내림차순), 동점시 직군명 사전순
vector<si> v(result.begin(), result.end());
sort(v.begin(), v.end(), cmp);
//
answer = v[0].first;
//
return answer;
}
# string 분할 by split(' ')
-> sstream 사용하는 방법도 좋다
# map value로 정렬, value같을시 key값 사전순 정렬
[ 5주차 ] : < LV2 / 1192명 >
더보기
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<string> v;
vector<int> wordSize = { 1, 2, 3, 4, 5 };
vector<char> chars = { 'A', 'E', 'I', 'O', 'U' };
void repeatPermutation(int depth, string str, int size)
{
if(depth == size)
{
v.push_back(str);
return;
}
//
for(int i = 0; i < chars.size(); ++i)
{
str[depth] = chars[i];
repeatPermutation(depth + 1, str, size);
}
}
int solution(string word)
{
int answer = 0;
//
for(int i = 1; i <= wordSize.size(); ++i)
{
string str(i, ' ');
repeatPermutation(0, str, i);
}
//
sort(v.begin(), v.end());
//
auto it = find(v.begin(), v.end(), word);
if(it == v.end())
return -1;
//
answer = it - v.begin() + 1;
//
return answer;
}
# 재귀를 이용한 중복순열 생성