최대 1 분 소요

Question

Q Q2 Q3 Q4


Solution

  • 단어와 번호를 담을 정렬되지 않는 map를 사용한다, 처음 26개의 알파벳에 대해 map에 넣어준다.
  • string msg에 대해 for루프를 사용하되 사전에 있는 단어일 경우 계속 붙여줘야 하기 때문에 이중for루프를 사용한다.
  • 루프를 도는 i에 대해서도 붙여진 문자가 많을 수록 건너뛰는 경우에 대해 처리해준다.
  • 마지막 인덱스에 도달시 사전에 등록되어 있는 경우에 대한 처리를 해준다.

Cord

#include <vector>
#include <string>
#include <unordered_map>

using namespace std;

vector<int> solution(string msg)
{
    vector<int> answer;
    unordered_map<string, int> dic; //(알파벳, 번호)

    int idx;
    for (idx = 0; idx < 26; ++idx)
    {
        string alpha = "";
        alpha += (65 + idx);
        dic.insert({ alpha, idx + 1 });
    }

    for (int i = 0; i < msg.size(); ++i)
    {
        string temp = "";

        for (int j = i; j < msg.size(); ++j)
        {
            temp += msg[j];

            // 사전에 있는 문자면 + c 하기
            if (dic.find(temp) != dic.end())
            {
                // 마지막 도달시 처리
                if (j == msg.size()-1) 
                {
                    answer.push_back(dic[temp]);
                    return answer;
                }
            }
            // 사전에 없으면 w에 대한 색인 번호 출력, w+c 등록
            else
            {
                dic.insert({ temp, ++idx });   // 사전에 등록
                i = j-1;

                // 가장 뒤에있는 문자 빼고 색인번호 출력
                temp.pop_back();               
                answer.push_back(dic[temp]);
                
                break;
            }
        }
    }

    return answer;
}

Result

Result