코린이 탈출기
[2020 KAKAO BLIND RECRUITMENT][JAVASCRIPT] 문자열 압축 본문
문제에서 요구하는 대로 구현하면 된다.
어렵지 않은 문제 !
그래 솔직히 첫 문제부터 어려우면 안되지.. 7문제나 내면서 ㅠ ㅠ 궁시렁
C++은 string에 대한 함수가 너무 없어서 javascript로 풀어보았다
요새 IR센터 근무하면서 계속 자바스크립트를 다루다 보니 어느새 손에 익숙해져서,, ㅎ
크롬으로 디버깅 돌리는 게 너무 편해서 좋다. 알아서 코드 옆에 변수 값 어떻게 바뀌는지 다 보여준다 ~
<문제 풀이 Logic>
문자열을 제일 앞에서부터 정해진 길이만큼 잘라야 하기 때문에 split할 길이를 for문으로 돌리고 그 길이만큼 앞에서부터 잘라주면 된다. split할 길이를 정하는 for문은 문자열의 길이/2 만큼만 수행하면 된다.
split한 문자열(now)과 그 전에 split한 문자열(prev)를 비교하여 같으면 same_cnt 증가, 다르면 tmp_answer(압축 문자열 길이)에 이때까지 압축된 길이를 더해준다. 그리고 same_cnt는 다시 0으로 초기화.
split할 길이를 어떻게 정하냐에 따라 tmp_answer은 달라지는데, 우리는 압축했을 때 가장 짧은 경우를 찾고 있기 때문에 tmp_answer의 min값을 구하면 된다.
-전체 코드-
<!DOCTYPE html>
<html>
<script>
var s = "a";
function digit(num) {
var string_num = num.toString();
return string_num.length;
}
function solution(s) {
var answer = 0;
var split = s.length / 2;
var same_cnt = 0;
if(s.length == 1)
return 1;
for (var sp = 1; sp <= split; sp++) {
var tmp_answer = 0;
var prev = null;
for (var i = 0; i < s.length; i += sp) {
if (prev == null) {
var prev = s.substr(i, sp);
continue;
}
var now = s.substr(i, sp);
if (now == prev) {
same_cnt++;
}
else {
if (same_cnt != 0) {
tmp_answer += (sp + digit(same_cnt+1));
same_cnt = 0;
}
else {
tmp_answer += sp;
}
}
prev = now;
}
if (same_cnt != 0) {
tmp_answer += (sp + digit(same_cnt));
same_cnt = 0;
}
else {
tmp_answer += now.length;
}
console.log(sp + " : " + tmp_answer);
if (answer == 0)
answer = tmp_answer;
else {
answer = Math.min(answer, tmp_answer);
}
}
console.log(answer);
return answer;
}
solution(s);
</script>
</html>
'문제 풀이' 카테고리의 다른 글
[2020 KAKAO BLIND RECRUITMENT][C++] 자물쇠와 열쇠 (0) | 2020.08.30 |
---|---|
[2020 KAKAO BLIND RECRUITMENT][JAVASCRIPT] 괄호 변환 (0) | 2020.08.28 |
[2020 KAKAO BLIND RECRUITMENT][C++] 가사 검색 (2) | 2020.08.28 |
[백준 2493] 탑 (1) | 2020.07.30 |
[백준 13458] 시험 감독 (2) | 2020.07.29 |