https://programmers.co.kr/learn/courses/30/lessons/60057
🎇 풀이방법
이중 for문을 돌려야한다.
"aabbaccc"
이라고 치자.
먼저 문자를 1개 단위로 자른다고 생각해보자.
a와 그 다음 a를 비교한다 -> 같다.
그러면 앞에 2를 적는다.
a와 b를 비교한다 -> 다르다.
그러면 2다음에 a를 적는다.
b와 b를 비교한다 -> 같다.
2a다음에 2를 적는다.
b와 a를 비교한다 -> 다르다.
2a2b를 적는다.
a와 c를 비교한다 -> 다르다.
2a2ba를 적는다. ....
이렇게 만든 문자 1개
그다음 문자를 2개 단위로 자른다고 가정한다.
aa와 bb를 비교한다. -> 다르다
aa를 적는다.
bb와 ac를 비교한다 -> 다르다
aabb를 적는다 ...
이렇게 자를 수 있는 문자는 문자열 길이의 2분의 1까지 자를 수 있기 때문에
여기서는 4개까지 자른 문자를 만들어서 배열에 넣는다.
그러면 배열에는 4개의 문자가 있을텐데 이중에서 가장 길이가 작은 문자의 길이를 리턴하면 된다.
코드 도움 https://sustainable-dev.tistory.com/153
function solution(s) {
//문자열 길이 1인 경우
if (s.length === 1) return 1;
let strings = [];
let answer = 0;
//첫번째 반복문은 압축할 문자열 길이 1부터 시작 ~ 문자열 길이 / 2
//최대로 압축할 수 있는 길이는 문자열/2까지
for(let i = 1; i <= parseInt(s.length / 2); i++) { //문자를 몇개 단위로 나눌 것인가
let cnt = 1;
let string = '';
for(let j = 0; j < s.length; j += i) {
const current = s.substr(j, i); //j인덱스 부터 i개를 추출한다.
const next = s.substr(j+i, i); //다음 글자
if(current === next) {
cnt++;
} else {
string = cnt > 1? string + cnt + current : string + current;
cnt = 1;
}
}
strings.push(string.length);
}
return Math.min(...strings);
}
728x90
'알고리즘 > 프로그래머스 문제풀이' 카테고리의 다른 글
[프로그래머스] 기능개발 javascript (0) | 2021.09.14 |
---|---|
[프로그래머스] 완주하지 못한 선수 javascript (0) | 2021.09.14 |
[프로그래머스] 위장 java / HashMap 사용 (0) | 2021.06.01 |
[프로그래머스] 전화번호 목록 java /효율성 성공! Arrays.sort (2) | 2021.05.31 |
[프로그래머스] 가장 큰 수 java / 정렬/ Comparator, compare, compareTo 메소드로 String 오름차순 내림차순 정렬 (0) | 2021.05.28 |