반응형
▷ 문제 : 2020 KAKAO BLIND RECRUITMENT - 문자열 압축 LV.2
▷ 해결 날짜 : 2022.03.10
▷ 소요 시간 : 3시간
▷ 풀이 과정 :
문제 자체는 크게 어렵지 않았는데,
"ababcdcdababcdcd" 이런식의 문자열이 입력됐을 경우 1~N개 단위로 압축하여 가장 짧은 것의 길이를 반환하는게 이 문제의 전부이다.
이번에는 다른 문제와 달리 구현단계에서 좀 지체됐다.
단순하게 생각하여 기준 문자열 (원본 문자열에서 단위별로 자른 문자열)을 가지고 비교를 해주면 끝이다.
그 과정을 구현하면 되는건데,
잘라서 조각난 문자열을 넣어줄 배열 하나와 개수를 세는 변수 각각 하나씩을 준비한 다음
계속해서 기준 문자열을 가지고 이전에 담긴 문자열과 같은지만 체크해주면 구현이 완성된다.
▷ 구현
function solution(s) {
let answers = [];
for(let i = 1; i <= s.length; i++){
answers.push(getAnswer(s, i));
}
return Math.min(...answers.map(e => e.join('').length));
}
function getAnswer(str, unit){
let count = 1;
let answer = [];
for(let i = 0 ; i <= str.length/unit ; i++){
let unitStr = str.slice(unit * i, unit * i + unit);
if(answer[answer.length - 1] == unitStr){
count++;
}else{
if(count > 1) answer[answer.length - 1] = count + answer[answer.length - 1];
answer.push(unitStr);
count = 1;
}
}
return answer;
}
▷ 복기 :
문제는 생각보다 쉬웠다.
근데 시간이 너무 많이 소요되었는데, 요즘들어 알고리즘 이것저것 익히다보니 너무 어렵게 생각하는 습관이 생겨버렸다.
그래서 결국 멍때리다 단순하게 가보자 하고 푼 결과 3시간이라는 시간이 소요된게 너무 아쉽다.
그렇지만 지금 내 이런 상황에서 이 문제를 접한건 좋았다고 생각된다.
반응형
댓글