티스토리 뷰
문제
programmers.co.kr/learn/courses/30/lessons/60057
코딩테스트 연습 - 문자열 압축
데이터 처리 전문가가 되고 싶은 어피치는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문자
programmers.co.kr
문제 풀이
1. 반복되는 문자열의 길이 l은 1<=l <= s.length()이며, s를 l단위로 압축 할 때 만들 수 있는 가장 짧은 길이를 구하면 된다.
2. s를 l만큼씩 탐색한다고 할 때, 같은 문자열이 연속해서 반복되면 몇 번 연속으로 반복되는지 체크하고 s의 끝까지 탐색이 끝나면 문자열이 반복된 횟수 d도 그 길이를 계산하여 len에 더해준다.
-
압축의 시작점을 st라 할 때 압축되는 끝점은 st+2∗l−1이고, 이는 항상 s의 마지막 인덱스보다 작아야한다.
-
따라서 그 끝점이 s의 마지막 인덱스보다 크거나 같을 땐 (압축할 수 없을 때) 문자의 개수만큼 더해준다.
코드
#include <string> #include <vector> #include <algorithm> using namespace std; int solution(string s) { int sz = s.length(), ans = sz; for (int l = 1; l <= sz / 2; l++) { int len = 0, d = 1; for (int st = 0; st < sz; st += l) { d = 1; if (st + 2 * l - 1 < sz) while (st + 2 * l - 1 < sz && s.substr(st, l) == s.substr(st + l, l)) d++, st += l; else { len += sz - st; break; } if (d == 1) len += l; else { int n = 0; for (int i = d; i; i /= 10) n++; len += n + l; } } ans = min(ans, len); } return ans; }
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스 2020 카카오 인턴십] 수식 최대화 (0) | 2020.10.31 |
---|---|
[프로그래머스 2020 카카오 인턴십] 키패드 누르기 (0) | 2020.10.31 |
[프로그래머스 2020 KAKAO BLIND RECRUITMENT] 자물쇠와 열쇠 (0) | 2020.09.04 |
[프로그래머스 2020 KAKAO BLIND RECRUITMENT] 괄호 변환 (0) | 2020.09.04 |
[프로그래머스 Level3] 순위 c++ (0) | 2020.08.17 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 프로그래머스
- 2021 카카오 블라인드
- 2022 카카오 블라인드 코딩테스트
- 프로그래머스 위클리 9주차
- 카카오 표 편집
- 유니온파인드
- 백준
- 카카오 2020 인턴십
- 투포인터
- DP
- 구현
- BFS
- 2020 KAKAO BLIND RECRUITMENT
- 표 편집
- 시뮬레이션
- 2021 KAKAO BLIND
- 카카오 2차코딩테스트
- 카카오 2021
- 동적계획법
- 위클리 챌린지
- 2022 카카오블라인드
- 프로그래머스 월간코드챌린지
- 파싱
- 게임이론
- 카카오 인턴십
- Kakaoblind
- 이분탐색
- 누적합
- 2022 KAKAO BLIND RECRUITMENT
- 트리
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함