250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 안드로이드
- android
- scroll
- viewmodel
- Button
- 앱
- binding
- 계측
- appbar
- Compose
- tabbar
- livedata
- DART
- ScrollView
- intent
- CustomScrollView
- textfield
- 앱바
- activity
- Flutter
- LifeCycle
- data
- drift
- TEST
- Kotlin
- Navigation
- textview
- Coroutines
- 테스트
- Dialog
Archives
- Today
- Total
Study Record
[프로그래머스] Level2 - 문자열 압축 본문
728x90
#include <string>
#include <vector>
using namespace std;
int getNum(int a){
int num = 0;
while (a > 0) {
a = a * 0.1;
num++;
}
return num;
}
string getString(string str, int start, int count) {
string s = "";
for (int i = 0; i < count; i++) {
s += str[start+i];
}
return s;
}
int solution(string s) {
int answer = s.size();
int len = s.size();
for (int i = 1; i <= (int)(len / 2); i++) {
int tmp_answer = 0, j = 0;
while (1) {
string str = getString(s, j, i);
int num = 0, index = j + i;
// 겹쳐지는 문자열 찾기, num : 겹쳐지는 문자열 개수
for (; index + i <= len; index = index + i) {
string tmp = getString(s, index, i);
if (tmp != str) break;
num++;
}
if (num > 0) {
// 겹치는 것이 존재한다면
int a = getNum(num + 1);
tmp_answer += a + i;
j += (num + 1) * i;
}
else {
tmp_answer += i;
j += i;
}
if (j + i >= len) {
tmp_answer += len - j;
break;
}
}
if (tmp_answer < answer) answer = tmp_answer;
}
return answer;
}
728x90
'알고리즘' 카테고리의 다른 글
[프로그래머스] Level2 - 오픈채팅방 (0) | 2021.12.01 |
---|---|
[프로그래머스] Level1 - 키패드 누르기 (0) | 2021.12.01 |
[프로그래머스] Level1 - 숫자 문자열과 영단어 (0) | 2021.11.30 |
[프로그래머스] Level1 - 신규 아이디 (0) | 2021.11.30 |
[프로그래머스] Level1 - 로또의 최고 순위와 최저 순위 (0) | 2021.11.30 |