본문으로 바로가기

숫자 문자열과 영단어 ] : < 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;
}

# 재귀를 이용한 중복순열 생성