본문 바로가기
알고리즘/c++ 프로그래머스

[프로그머스 압축] c++ (풀이 및 코드)

by 말린밴댕이_공부 2023. 5. 19.
반응형

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/17684

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제

 

풀이 및 코드

문제를 잘못  생각해서 너무 꼬아서 생각을 해 시간이 꽤 오래 걸렸던 문제입니다. (사실 굉장히 쉽다고 생각합니다.)

 

처음 A~Z까지의 문자들을 map에 먼저 insert를 해줍니다 (1부터 26까지)

map을 사용하여 찾는것이 존재하지 않을때에 대해서 map에 insert를 해주고

현재 입력에 대해서 answer에 push_back을 진행해주었습니다.

 

/*
압축

그냥 계속 가다가 만약에 맵에 존재하지 않으면 그에 대해서
map에는 insert를 하고 맨뒤 문자를 잘라내고 그다음 answer에다 push_back을 한다.
다만 다음글자가 지정된 곳에서 다시 반복문을 시작해야하므로 i--

그리고 보면 마지막 kakao의 o와 tobe~~애서의 ot를 보면 반복문이 끝나고 또 따로 push_back을 해야함
*/
#include <string>
#include <vector>
#include <map>
#include <algorithm>
#include <iostream>

using namespace std;

vector<int> solution(string msg) {
    vector<int> answer;
    map<string,int> m;
    string s = "";
   
    for(int i = 1 ; i <= 26; i++){
        char c = 'A' + (i - 1);
        s ="";
        s += c;
        m.insert({s,i});
    }
   
    int idx = 27;
    s="";
    for(int i = 0; i < msg.length();i++){
        s.push_back(msg[i]);
        if(m.find(s) == m.end()){
            m.insert({s,idx});
            idx++;
            s.pop_back();
            answer.push_back(m[s]);
            s="";
            i--;
        }
    }
    answer.push_back(m[s]);
    return answer;
}

 

 

반응형

댓글