오늘의 알고리즘
[C++]2020 KAKAO BLIND RECRUITMENT 문자열 압축(프로그래머스 2레벨)
하늘하늘 .
2022. 1. 21. 02:29
#include <string>
#include <vector>
int stringcompression(std::string s, int number)
{
int size = (int)s.size() / number;
int snumber = 0;
std::vector<std::string> vec = {};
vec.resize(size + 1);
for (int i = 0; i <= size; ++i)
{
for (int j = 0; j < number; ++j)
{
if (i * number + j < s.size())
vec[i].push_back(s[i * number + j]);
}
}
int count = 0;
for (int i = 0; i < vec.size() - 1; ++i)
{
// 같은 숫자 세기
++count;
while (vec[i] == vec[i + count])
{
// 이전 벡터의 숫자가 숫자 일 때
if (i != 0 && vec[i - 1][0] >= '0' && vec[i - 1][0] <= '9')
{
// 숫자가 9를 넘을 때
int x = stoi(vec[i - 1]);
++x;
vec[i - 1] = std::to_string(x);
}
// 숫자가 아닐 때
else
vec.insert(vec.begin() + i, std::string("2"));
vec.erase(vec.begin() + i + 1);
}
count = 0;
}
std::string a = {};
for (int i = 0; i < vec.size(); ++i)
{
for (int j = 0; j < vec[i].size(); ++j)
{
a.push_back(vec[i][j]);
}
}
return a.size();
}
int solution(std::string s)
{
int answer = (int)s.size();
for (int i = 1; i < s.size(); ++i)
{
int a = stringcompression(s, i);
if (a < answer)
answer = a;
}
return answer;
}
잘하다가 갑자기 21번 27번 테스트인가? 에서 실패를 하길래 애를 먹은 케이스
처음에는 stoi를 안 쓰고 그냥 숫자를 따로 넣었었다.
그래서 그런지 숫자끼리 같다고 판독을 해버리고 넘어가버린 케이스 찾느라 이것저것 케이스 엄청 넣었다 진자...ㅋㅋㅋㅋ
결국엔 stoi를 넣고 숫자를 아예 하나로 통으로 넣었더니 성공!