본문으로 바로가기

문자열 압축 ] : < LV2 / 11968명 >

더보기
#include <string>
#include <vector>
#include <iostream>

using namespace std;

int Compress(string s, int unit)
{
    vector<string> v;
    string res = "";
    int i = 0, count = 1;
    //
    while(true)
    {
        v.push_back(s.substr(i, unit));
        i += unit;
        if(i >= s.size())
            break;
    }
    //
    for(int j = 0; j < v.size(); ++j)
    {
        if(j == v.size()-1)
        {
            if(v[j-1] == v[j])
                res += to_string(count) + v[j];
            else
                res += v[j];
            //
            break;
        }
        //
        if(v[j] == v[j+1])
            ++count;
        else
        {
            if(count > 1)
                res += to_string(count) + v[j];
            else
                res += v[j];
            //
            count = 1;
        }
    }
    //
    return res.size();
}

int solution(string s)
{
    int answer = 0; // min length
    //
    int length = s.size();
    int maxUnit = length / 2;
    int compLength = length;
    //
    for(int i = 1; i <= maxUnit; ++i)
    {
        compLength = Compress(s, i);
        if(compLength < length)
            length = compLength;
    }
    answer = length;
    //
    return answer;
}

#


[ 타겟 넘버 ] : < LV2 / 18093명 >

더보기
#include <string>
#include <vector>
#include <deque>
#include <cmath>

using namespace std;

int solution(vector<int> numbers, int target)
{
    int answer = 0;
    int count = numbers.size();
    // target을 구할 수 없는 경우 예외처리
    int max, min = 0;
    for(int i = 0; i < count; ++i)
    {
        max += numbers[i];
        min -= numbers[i];
    }
    if(target > max || target < min)
        return 0;
    else if(target == max || target == min)
        return 1;
    // 모든 경우의 수 계산
    deque<int> dq;
    dq.push_back(0);
    for(int i = 0; i < count; ++i)
    {
        for(int j = 0; j < pow(2, i); ++j)
        {
            int temp = dq.front();
            dq.pop_front();
            //
            dq.push_back(temp + numbers[i]);
            dq.push_back(temp - numbers[i]);
        }
    }
    // 원소 갯수는 2의 배수이고, [대칭구조]이므로
    // (size / 2) 까지만 탐색하고, -target인 경우도 포함시킨다.
    for(int i = 0; i < dq.size() / 2; ++i)
    {
        if(dq[i] == target || dq[i] == -target)
            ++answer;
    }
    //
    return answer;
}

# deque, pop_front()


[ 오픈 채팅방 ] : < LV2 / 10163명 >

더보기
#include <string>
#include <vector>
#include <map>

using namespace std;

vector<string> SplitSpace(string s)
{
    vector<string> result;
    //
    string space = " ";
    int pos = 0;
    while (pos != string::npos)
    {
        pos = s.find(space);
        result.push_back(s.substr(0, pos));
        s.erase(0, pos + space.length());
    }
    //
    return result;
}

vector<string> solution(vector<string> record)
{
    vector<string> answer;
    //
    map<string, string> mID; // key : id , value : name
    //
    vector<string> msg;
    for(int i = 0; i < record.size(); ++i)
    {
        msg.clear();
        msg = SplitSpace(record[i]);
        if(msg.size() > 2)
            mID[msg[1]] = msg[2];
    }
    //
    map<string, string> mAction;
    mAction["Enter"] = "들어왔습니다.";
    mAction["Leave"] = "나갔습니다.";
    //
    for(int i = 0; i < record.size(); ++i)
    {
        msg.clear();
        msg = SplitSpace(record[i]);
        if(msg[0] == "Enter" || msg[0] == "Leave")
        {
            string temp = mID[msg[1]] + "님이 " + mAction[msg[0]];
            answer.push_back(temp);
        }
    }

    return answer;
}

# 공백제거 : substr(pos, space(" ")), string::npos

# map