본문 바로가기

알고리즘

프로그래머스 압축

오늘 프로그래머스 2레벨 테스트볼때 나온 문제

 

https://programmers.co.kr/learn/courses/30/lessons/17684?language=cpp 

 

코딩테스트 연습 - [3차] 압축

TOBEORNOTTOBEORTOBEORNOT [20, 15, 2, 5, 15, 18, 14, 15, 20, 27, 29, 31, 36, 30, 32, 34]

programmers.co.kr

 

 

고민하다가 map을 사용해야겠다는 생각이 들어서 사용했다.

먼저 map에 A~Z까지 색인 번호를 등록시켜주었고,

 

문자열을 넣을때마다 Map에 등록이 되있는지 탐색을 했다.

만약 들어가있다면 다시 문자열을 추가해서 탐색을 하였고,

 

만약 Map에 등록이 되어있지 않다면 색인 번호와 문자열을 Map에 넣어주고

string의 맨 끝자리를 빼주고 색인번호를 찾았다. 

이전까지는 확실히 등록이 되있기때문에 가져와서 answer에 넣어주고 다시 처음부터 돌려주었다.

 

만약 마지막에 string값이 남아있다면 찾아서 answer에 넣어주고 리턴을 해주었다.

 

 

순서를 제대로 못짜서 순서고민하는데 10분 걸려서 총 20분 걸렸다.

#include <string>
#include <vector>
#include <map>
using namespace std;
map<string, int> m_map;


vector<int> solution(string msg) {
    vector<int> answer;
    for (int i = 1; i < 27; ++i)
    {
        string str="";
        char c = 'A' + i - 1;
        str =str+ c + "";
        m_map.insert({ str, i });
    }



    int cnt = 27;
    string str="";
    for (int i = 0; i < msg.size(); ++i)
    {
        str = str+msg[i] + "";
        auto iter = m_map.find(str);
        if (iter != m_map.end())
        {

        }
        else
        {
            m_map.insert({ str, cnt });
            cnt++;
            str.pop_back();
            answer.push_back(m_map.find(str)->second);
            str = "";
            i--;
        }
    }
    if (str != "")
    {
        answer.push_back(m_map.find(str)->second);
    }
    return answer;
}

int main()
{
    string str = "KAKAO";
    solution(str);
}

'알고리즘' 카테고리의 다른 글

백준 1201 NMK C++  (0) 2021.09.09
16954 움직이는 미로 탈출 C++ DFS deque  (0) 2021.09.05
4256 트리  (0) 2021.08.21
6416 백준 트리인가?  (0) 2021.08.20
21939 백준  (0) 2021.08.18