반응형
📌문제 출처
https://programmers.co.kr/learn/courses/30/lessons/60057
코딩테스트 연습 - 문자열 압축
데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문
programmers.co.kr
<html>
<head>
<meta charset="UTF-8">
<title>출력결과</title>
</head>
<body>
<script>
function solution(s) {
let answer = 0;
//최소값을 안전한 제일큰값으로 우선설정
let min = Number.MAX_SAFE_INTEGER;
//i는 압축 단위
//절반을 넘겨서 압축은 의미 없고
//+1은 입력받은 문자가 1개일 경우 대비
for(let i=1;i<=Math.floor(s.length/2)+1;i++){
//압축문자들을 받을 변수 res
let res = '';
//압축횟수 cnt
let cnt = 1;
//j가 1일때는 1개씩증가
//2일때는 2개씩 증가하도록
//for문의 증감문부분에 j+=i를 써줌
for(let j=0;j<s.length;j+=i){
//i가 압축단위이므로
//substr로 압축단위씩 잘라 비교
//같다면 res에 넣지는 않고 압축횟수만++
if(s.substr(j,i) === s.substr(j+i,i)){
cnt++;
}
//다르고 cnt의 증감이 있었다면
//res에 먼저 압축횟수써주고
//그다음 압축문자열을 써줌
else if(cnt != 1){
res+=cnt;
res+=s.substr(j,i)
cnt = 1;
}
//다르고 cnt증감없었다면
//그냥 바로 써줌
else{
res+=s.substr(j,i)
}
}
//압축이 끝나고 지금까지의 길이를 작다면
//min에 업데이트
if(res.length < min) min = res.length;
}
//answer는 min임
answer = min;
return answer;
}
let s = "abcabcabcabcdededededede"
console.log(solution(s));
</script>
</body>
</html>
반응형
'프로그래머스' 카테고리의 다른 글
음양더하기 (0) | 2022.07.16 |
---|---|
두 정수 사이의 합 (0) | 2022.07.16 |
두 개 뽑아서 더하기 (0) | 2022.01.31 |
최소직사각형 (0) | 2022.01.31 |
수박수박수박수박수박수? (0) | 2022.01.31 |