프로그래머스/Level_2

[프로그래머스 Level_2 / C++ / 카카오] [3차] 압축

배발자 2022. 2. 20.
반응형

문제를 읽고 이해가 잘 되지 않아서 예제를 보고 이해를 한 문제이다. 

 

#접근방법 

  1. A~Z 까지 unordered_map 에 <string, int> 형태로 저장 ( A : 1  ~ Z : 26 )
  2. map(사전) 에 저장되지 않은 문자열을 찾을 때까지 문자들을 새로 생성한 문자열에 이어 붙여준다. 
  3. map(사전)에 저장되지 않은 문자열을 찾으면 바로 전에 있던 값(prev)을 출력하고 이어 붙인 문자열을 사전에 등록
  4. 반복문에 종료된 후 prev에 값이 남아있다면 해당 값 또한 answer 에 넣어준다. 
#include <string>
#include <vector>
#include <unordered_map>
#include <iostream>
using namespace std;
unordered_map <string, int> m; 
vector<int> solution(string msg) {
    vector<int> answer;
    int cnt =1; 
    for(int i=0; i<26; i++){
        string s= ""; 
        char c = 'A'+i;
        s+=c; 
        m[s]=cnt++; 
    }
    int prev = 0, j; 
    string s = "";  char c;  
    for(int i=0; i<msg.size(); i++){
        prev=0;   s= ""; 
        for(j=i; j<msg.size(); j++){
            c = msg[j]; 
            s+=c;            
            if(m[s]>0)prev = m[s];                 
            else{
                i=j-1; 
                m[s]=cnt++;                 
                answer.push_back(prev); 
                break; 
            }
            if(j==msg.size()-1)i=msg.size();           
        }             
    }
    if(prev)answer.push_back(prev); 
    return answer;
}
 

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

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

programmers.co.kr

 

반응형

댓글