Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- tailwindcss
- 빅오
- never타입
- nestjs
- Algorithm
- react
- react-query
- textarea autosize
- 투포인터
- 스택
- typscript
- 그리디
- 블로그만들기
- 버블정렬
- styled-components
- 라이프사이클
- next.js
- NextAuth
- js알고리즘
- TypeScript
- 해쉬
- 큐
- aws lightsail
- isNaN
- 정렬
- cookie
- JavaScript
- 알고리즘
- 슬라이딩윈도우
- nextjs
Archives
- Today
- Total
far
[JS 알고리즘] 문자열 압축 본문
문자열 압축
알파벳 대문자로 이루어진 문자열을 입력받아 같은 문자가 연속으로 반복되는 경우 반복되는 문자 바로 오른쪽에 반복 횟수를 표기하는 방법으로 문자열을 압축하는 프로그램을 작성하시오. 단 반복횟수가 1인 경우 생략합니다.
입력설명
첫 줄에 문자열이 주어진다. 문자열의 길이는 100을 넘지 않는다.
출력설명
첫 줄에 압축된 문자열을 출력한다.
입력예제
KKHSSSSSSSE
출력예제
K2HS7E
// 나의 풀이
function solution(s){
let answer = "";
let num = 1;
let prev = "";
for (let i of s) {
if (prev === i) {
num++
} else {
if (num !== 1) {
answer += num
}
answer += i
num = 1
}
prev = i
}
if (num !== 1) {
answer += num
}
return answer;
}
let str="KKHSSSSSSSE";
console.log(solution(str));
최대한 if문을 적게 사용하고 싶었는데 이 방법 말고는 떠오르지가 않았다.
// 강의의 풀이
function solution(s){
let answer="";
let cnt=1;
s=s+" "; // [i+1]시 마지막 문자 에러 방지
for(let i=0; i<s.length-1; i++){
if(s[i]===s[i+1]) cnt++;
else{
answer+=s[i];
if(cnt>1) answer+=String(cnt);
cnt=1;
}
}
return answer;
}
let str="KKHSSSSSSSE";
console.log(solution(str));
문자열에 공백을 추가하여 에러를 방지하는 방법을 사용해 s[i] === s[i+1]이라는 if문을 성립시켰다. 이 부분을 해결하지 못해 for...of문을 사용했던건데 생각보다 해결책이 간단했다.
'알고리즘 > 알고리즘 베이스' 카테고리의 다른 글
[JS 알고리즘] 뒤집은 소수 (0) | 2023.03.26 |
---|---|
[JS 알고리즘] 자릿수의 합 (0) | 2023.03.26 |
[JS 알고리즘] 가장 짧은 문자거리 (0) | 2023.03.25 |
[JS 알고리즘] 숫자만 추출 (0) | 2023.03.25 |
[JS 알고리즘] 유효한 팰린드롬 (0) | 2023.03.25 |
Comments