https://programmers.co.kr/learn/courses/30/lessons/60057
프로그래머스 2단계를 풀다가 틀려서 배지를 획득을 못했는데, 이 문제가 나왔다.
첫번째 문제는 20분만에 풀어서 나름 시간이 충분하다고 생각했는데, 틀려서 분하다..
패인을 크게 2가지로 분석하자면
1. substr stl을 몰랐다. 왜냐하면 문자열 관련된 문제를 지금까지 하나도 안 풀어 봤기 때문이다.
2. 1의 방법을 몰라서, 자른 문자열들을 string type의 array에 넣어 보려고 했는데,array의 원소의 개수를 파악하는데 애를 먹었다.
그림처럼
int main(void){
string s[5] = {"aa","bb","ab","df"};
cout<< s->size();
}
을 실행했을때 내가 구해내고자 싶었던 값은 4였다. s에 원소가 4개가 있기 때문이다.
하지만 실행 결과는 2였다.
차라리 벡터 containor를 이용할 걸그랬다. 하지만 디버깅하다가 말려서 생각이 안나더라. (vector를 이용하면 4 값이 잘 나온다.)
다 공부가 부족한 탓이겠지. 문자열 처리 관련 부분은 연습을 좀 더 해야될것 같다. 카카오에서 꼭 1 2번으로 나오는 유형같아 보이니까 연습해둬야한다.
다음은 소스코드.
검사하는 압축 길이를 1부터 n/2까지 돌리되, 나누어 떨어지지 않을 경우에는 한번 다시 더해줘야 하는 과정까지 해내야 한다.
#include <string>
#include <vector>
using namespace std;
int solution(string s) {
int len = s.size();
int answer = len;
for(int i=1; i<=(len/2); i++){
string result = "";
string temp = s.substr(0,i);
int count = 1;
for(int j=i; j<=len; j+=i){
if(temp == s.substr(j,i))
count++;
else{
if(count==1)
result += temp;
else
result += to_string(count) + temp;
temp = s.substr(j,i);
count=1;
}
}
if(len/i !=0)
result += s.substr((len/i)*i);
answer = min(answer,int(result.size()));
}
return answer;
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 2021 카카오공채 7번 매출하락 최소화-가장 쉽게 트리 dp로 푸는법, 쉬운설명 (0) | 2021.03.08 |
---|---|
2020 카카오 1차 코딩테스트 - 자물쇠와 열쇠 c++ (0) | 2020.03.08 |
프로그래머스 카카오 1차 공채 코딩테스트 - 괄호변환 c++ (0) | 2020.03.08 |