728x90
https://programmers.co.kr/learn/courses/30/lessons/60057
문제 풀이
브루트 포스로 접근했다!
첫 반복문의 최대 반복 회수는 입력받은 문자열의 반만큼인데,
단위가 입력받은 문자열의 길이의 반 이상이라면 압축하는 의미가 없기 때문이다.
다음 반복문에선 비교를 통해서 반복되는지 확인해준다.
같다면 압축 회수(=cnt)를 증가시키고 아니라면 str에 입력해준다.
최종적으론 현재 answer와 str의 길이를 비교해서 더 작은 값을 answer에 저장해서 출력한다!
느낀 점
제일 짧은 길이를 리턴하기 위해서 min 함수를 사용하려고 했는데 <algorithm> 헤더를 추가해도 계속 오류가 발생했다. 왜 발상했는지 좀 찾아보아야 할 것 같다. 단계적으로 문제를 풀어나가면 쉽게 풀릴만한 난이도였던 것 같다.
코드
#include <string>
using namespace std;
int solution(string s) {
int answer = s.length();
for (int i = 1;i <= s.size() / 2;i++) {
string tmp = "";
string str = "";
int cnt = 1;
tmp = s.substr(0, i);
for (int j = i;j < s.size();j += i) {
if (tmp == s.substr(j, i))
cnt++;
else {
if (cnt > 1)
str += to_string(cnt);
str += tmp;
tmp = s.substr(j, i);
cnt = 1;
}
}
if (cnt > 1) str += to_string(cnt);
str += tmp;
if (answer > str.size()) answer = str.size();
}
return answer;
}
'문제 풀이 > 프로그래머스 (Programmers)' 카테고리의 다른 글
[C++] 프로그래머스 : 카카오프렌즈 컬러링북 (0) | 2021.09.22 |
---|---|
[C++] 프로그래머스 : 오픈채팅방 (0) | 2021.09.21 |
[C++] 프로그래머스 : 약수의 개수와 덧셈 (0) | 2021.09.13 |
[C++] 프로그래머스 : 키패드 누르기 (0) | 2021.09.13 |
[C++] 프로그래머스 : 로또의 최고 순위와 최저 순위 (0) | 2021.07.01 |
댓글