하루에 한 문제
[프로그래머스 2020 KAKAO BLIND RECRUITMENT] 문자열 압축 -JavaScript 본문
https://programmers.co.kr/learn/courses/30/lessons/60057?language=javascript#
function solution(s) {
var answer = s.length;
let len=s.length;
for(let i =1; i<=len/2; i++){ //자르는 크기
let j=i;
let cnt=1;
let compressionStr =""
let str = s.substring(0, i);
for(; j<=len; j+=i){
if(str===s.substring(j,j+i)) cnt++;
else {
if(cnt===1) compressionStr+=str;
else compressionStr+=cnt+str;
str=s.substring(j,j+i);
cnt=1;
}
}
if(cnt===1) compressionStr+=str;
else compressionStr+=cnt+str;
answer=Math.min(answer, compressionStr.length)
}
return answer;
}
소요시간 : 20분
우선 가장 바깥은 포문은 s의 길이/2 만큼만 돌아주면 됩니다.
s의 길이/2 보다 커지면 절대로 압축을 할 수 없기 때문입니다.
로직을 살펴보면
1. 현재 문자열과 다음 문자열(현재 문자열 기준 + 사이즈만큼 자른 문자열)이 같으면 cnt++을 해줍니다.
2. 현재 문자열과 다음문자열이 다르다면
- cnt가 1일 때 : 숫자를 붙여줄 필요가 없기 때문에 바로 문자를 더해줍니다.
- cnt가 1이상일 때 : 압축이 되었다는 뜻이기 때문에 숫자 + 문자를 해줍니다.
아 그리고 주의사항으로는 "a" 같이 한 글자만 들어왔을 때 예외 처리를 해주어야 합니다.
저는 맨처음 answer에 s의 길이를 주는 것으로 예외사항을 처리했습니다.
끝~
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 2019 KAKAO BLIND RECRUITMENT] 실패율 -JavaScript (1) | 2021.05.05 |
---|---|
[프로그래머스 2020 KAKAO BLIND RECRUITMENT] 괄호 변환 -JavaScript (0) | 2021.05.04 |
[프로그래머스 2021 KAKAO BLIND RECRUITMENT] 순위 검색 - JavaScript (3) | 2021.05.02 |
[프로그래머스 2021 Dev-Matching: 웹 백엔드 개발자] 다단계 칫솔 판매 -JavaScript (0) | 2021.05.01 |
[프로그래머스 2021 KAKAO BLIND RECRUITMENT] 합승 택시 요금 -JavaScript (0) | 2021.04.30 |
Comments