728x90
programmers.co.kr/learn/courses/30/lessons/60057#
코드가 정말 정말 정말 말도안돼서 내가 푼 코드와 다른 사람들의 풀이코드를 올릴건데..
정말... 테스트케이스에 똑같은 글씨가 1000개 있는 코드가 없어서 맞은거지
이건 절대 맞은 코드가 아니다.. 정말 임기응변용 코드
그래서 이건 따로 알고리즘 설명같은건 안했다.....하하....... 그래도 3시간동안 머리싸매면서 한문제라도 내 손으로 푼게 정말 기분은 좋다 .... 아니다 좋으면안됩니다 이건 너무 별로인코드입니다...
내가 푼 코드(참고 절대 ㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴ)
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
|
#include <string>
#include <vector>
using namespace std;
int solution(string s) {
int answer = s.size();
int cmp;
int idx;
// i개 단위로 문자열을 잘라서 비교
for (int i = 1; i <= (s.size() / 2); i++) {
cmp = s.size();
idx = s.size();
int cnt = 0;
for (int j = 0; j <= (s.size()-2*i); j+=i) {
if (s.substr(j, i) == s.substr(j + i, i)) {
cmp -= i;
cnt++;
}
else {
if (cmp < idx) {
cmp += 1;
idx = cmp;
cnt = 0;
}
}
//가장 문제되는코드...... 이코드가 있는 이유는 나만알듯 ㅋㅋ;;;
if (cnt >= 9) {
cmp++;
cnt -= 90;
}
}
if (cmp < idx) cmp++;
if (cmp < answer) answer = cmp;
}
return answer;
}
|
cs |
다른분의 풀이를 보고 푼 참고버전,
중간중간 tmp에 갯수를 더할때 i를 쓰면안되고 current.size()를 써야한다
이유는 만약 문자열이 i의 갯수만큼 남아있지 않을 경우에
i개만큼 더하면 부족한 부분만큼 더하는게 아니라 정말 i개만큼 더해버리기 때문이다.
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
|
#include <string>
#include <vector>
using namespace std;
int solution(string s) {
int answer = s.size();
// i개 단위로 문자열을 잘라서 비교
for (int i = 1; i <= (s.size() / 2); i++) {
int cnt = 1, tmp = 0;
string current = s.substr(0, i);
for (int j = i; j < s.size() ; j += i) {
if (current == s.substr(j, i))
cnt++;
else {
if (cnt == 1)
tmp += current.size();
else
tmp += (to_string(cnt).size() + current.size());
current = s.substr(j, i);
cnt = 1;
}
}
if (cnt == 1) tmp += current.size();
else tmp += (to_string(cnt).size() + current.size());
if (tmp < answer) answer = tmp;
}
return answer;
}
|
cs |
javascript 코드
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
|
function solution(s) {
var answer = s.length;
for (let i = 1; i <= s.length / 2; i++) {
let cnt = 1,
newStr = ``;
for (let j = 0; j < s.length; j += i) {
let current = s.substring(j, j + i);
let next = s.substring(j + i, j + 2 * i);
if (current === next) {
cnt++;
} else {
if (cnt !== 1) {
newStr += cnt + current;
} else {
newStr += current;
}
cnt = 1;
}
}
answer = answer>newStr.length ? newStr.length : answer;
}
return answer;
}
|
cs |
728x90
'PS > 프로그래머스' 카테고리의 다른 글
[프로그래머스 LV 2] 게임 맵 최단거리 C++ (0) | 2021.05.18 |
---|---|
[프로그래머스 LV 2] 짝지어 제거하기 C++ (0) | 2021.05.18 |
[프로그래머스 LV 2] 카카오프렌즈 컬러링북 C++ (0) | 2021.03.23 |
[프로그래머스 LV 2] 124 나라의 숫자 C++ / javascript (0) | 2021.03.23 |
[프로그래머스 LV 2] 위장 C++ (0) | 2021.03.21 |