반응형
https://programmers.co.kr/learn/courses/30/lessons/60057
코딩테스트 연습 - 문자열 압축
데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문
programmers.co.kr



주어진 조건을 보고 그에 맞는 문자열 처리를 해주면 되는 문제입니다.
substr을 사용하여 문제를 해결할 수 있습니다.
문제 접근법
- 주어진 문자열을 압축하기 위해서 문자열을 자르고 자른 문자열을 주어진 문자열과 비교합니다.
- 이 때, 자른 문자열의 최대 길이는 주어진 문자열의 길이의 절반입니다.
- 절반을 초과하는 길이부터는 압축이 불가능하기 때문입니다.
- 즉, 문자열을 1부터 문자열의 길이 / 2 까지의 길이로 나눠가면서 압축을 진행해보면 되는 문제입니다.
아래는 코드입니다.
더보기
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
#include <string>
#include <vector>
using namespace std;
int solution(string s) {
int answer = 1000;
int len = s.size();
int tLen = len / 2;
if (len == 1)
return 1;
for (int i = 1; i <= tLen; i++)
{
string s1 = "";
string str = s.substr(0, i);
int count = 1;
for (int j = i; j <= len; j += i)
{
if (str == s.substr(j, i))
count++;
else
{
if (count == 1)
s1 += str;
else
s1 += to_string(count) + str;
str = s.substr(j, i);
count = 1;
}
}
if (len % i != 0)
s1 += s.substr(len - len % i, len % i);
if (answer > s1.size())
answer = s1.size();
}
return answer;
}
|
cs |
반응형
'프로그래머스 문제풀이 > LEVEL 2' 카테고리의 다른 글
[프로그래머스 / Level 2] 괄호 변환 (C++) (0) | 2021.12.12 |
---|---|
[프로그래머스 / Level 2] 조이스틱 (C++) (0) | 2021.11.25 |
[프로그래머스 / Level 2] 카카오프렌즈 컬러링북 (C++) (0) | 2021.11.20 |
[프로그래머스 / Level 2] 소수 찾기 (C++) (0) | 2021.11.19 |
[프로그래머스 / Level 2] 타겟 넘버 (0) | 2021.11.01 |
반응형
https://programmers.co.kr/learn/courses/30/lessons/60057
코딩테스트 연습 - 문자열 압축
데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문
programmers.co.kr



주어진 조건을 보고 그에 맞는 문자열 처리를 해주면 되는 문제입니다.
substr을 사용하여 문제를 해결할 수 있습니다.
문제 접근법
- 주어진 문자열을 압축하기 위해서 문자열을 자르고 자른 문자열을 주어진 문자열과 비교합니다.
- 이 때, 자른 문자열의 최대 길이는 주어진 문자열의 길이의 절반입니다.
- 절반을 초과하는 길이부터는 압축이 불가능하기 때문입니다.
- 즉, 문자열을 1부터 문자열의 길이 / 2 까지의 길이로 나눠가면서 압축을 진행해보면 되는 문제입니다.
아래는 코드입니다.
더보기
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
#include <string>
#include <vector>
using namespace std;
int solution(string s) {
int answer = 1000;
int len = s.size();
int tLen = len / 2;
if (len == 1)
return 1;
for (int i = 1; i <= tLen; i++)
{
string s1 = "";
string str = s.substr(0, i);
int count = 1;
for (int j = i; j <= len; j += i)
{
if (str == s.substr(j, i))
count++;
else
{
if (count == 1)
s1 += str;
else
s1 += to_string(count) + str;
str = s.substr(j, i);
count = 1;
}
}
if (len % i != 0)
s1 += s.substr(len - len % i, len % i);
if (answer > s1.size())
answer = s1.size();
}
return answer;
}
|
cs |
반응형
'프로그래머스 문제풀이 > LEVEL 2' 카테고리의 다른 글
[프로그래머스 / Level 2] 괄호 변환 (C++) (0) | 2021.12.12 |
---|---|
[프로그래머스 / Level 2] 조이스틱 (C++) (0) | 2021.11.25 |
[프로그래머스 / Level 2] 카카오프렌즈 컬러링북 (C++) (0) | 2021.11.20 |
[프로그래머스 / Level 2] 소수 찾기 (C++) (0) | 2021.11.19 |
[프로그래머스 / Level 2] 타겟 넘버 (0) | 2021.11.01 |