[C++로 풀이] 압축⭐⭐
카테고리: Programmers
태그: Coding Test Algorithm
📌 압축
난이도 ⭐⭐
🚀 문제
🚀 내 풀이 ⭕
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;
vector<int> solution(string msg) {
vector<int> answer;
// Key를 A~Z, 이에 대한 Value를 각각 1~26으로.
unordered_map<string, int> dic;
for(int i = 0; i < 26; i++){
char c = 'A' + i;
dic[string(1, c)] = i + 1;
}
string str = "";
int number = 27;
for(int i = 0; i < msg.length(); ){
str += msg[i]; // str.push_back(msg[i]);
if (dic.find(str) == dic.end()){
dic[str] = number++;
str.pop_back();
answer.push_back(dic[str]);
str = "";
}
else i++;
}
answer.push_back(dic[str]);
return answer;
}
- dic.find(str) != dic.end()
- 사전에 있다면 다음 문자를 붙인 것도 사전에 있나 확인하러 다음 반복으로 가야 한다.
i++
- 사전에 있다면 다음 문자를 붙인 것도 사전에 있나 확인하러 다음 반복으로 가야 한다.
- dic.find(str) == dic.end()
- 사전에 없다면 (KAO가 사전에 없다면)
- KAO 여태 만든 해당 문자열을 사전에 추가하고
- KA 현재 문자
msg[i]
를 뺀, 즉 그 이전까진 사전에 있었던 그 문자열을 출력한다. 다음 반복으로 갈 필요 없이 다시msg[i]
를 시작점으로 이어붙이기 시작해야하므로 이땐i++
하지 않는다. 이제 O 부터 다시 시작해야 함.
- 사전에 없다면 (KAO가 사전에 없다면)
- for문이 끝나기 바로 저의 마지막 문자열은 무조건
else
에 걸리기 때문에 (“KAO”가 사전에 있어도, 혹은 없어도, 마지막i
은 else 에 걸리게 되어있음)answer
에 추가되지 못했으므로 마지막에 for문 빠져나온 후 추가 해준다.
✈ string 과 char
string 에 char 붙이기
string str = "";
str += msg[i];
string
에 char
못 붙일 줄 알았는데 붙이는게 가능했다!
str.push_back(msg[i]);
stirng
의 push_back 은 char
를 인수로 받는다. 이렇게 한 문자씩 string
뒤에 이어 붙일 수 있게 된다.
char를 string으로 변환하기
char c = 'A' + i;
dic[string(1, c)] = i + 1; // 익명 객체
string str(1, 'A');
A
이런 한 문자(char)를 string으로 변환하고 싶을 땐 생성자 인수를 (1, char)
이런식으로 넘기면 된다. (string 의 사이즈는 1 + 해당 문자로 초기화)
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기