작성
·
25
0
function solution(s) {
const dic = {}
s.split("").forEach((el) => {
if (dic[el]) {
dic[el]++
} else {
dic[el] = 1
}
})
const newStr = [...new Set(str.split(""))]
return newStr
.map((el) => {
if (dic[el] && dic[el] !== 1) {
return (el += dic[el])
} else {
return el
}
})
.join("")
}
let str = "KKHSSSSSSSE"
console.log(solution(str))
먼저 오브젝트에 몇 개의 문자가 몇 번 등록되어있는지 저장한 후 set으로 중복을 제거해서 뼈대를 만들었습니다.
그 다음으로 반복문을 이용해서 오브젝트를 탐색해 뼈대에 문자열을 합성해주는 방식으로 풀었습니다. 답안에 비해 좀 복잡한 것 같은데 놓치거나 시간,공간복잡성에서 손해가 클까요?
답변 2
0
안녕하세요^^
위 방식으로 하면
let str = "KKSSSKKK"
str이 위와 같을 때 K5S3로 출력하게 됩니다. 이 문제는 연속된 같은 문자를 압축하는 것입니다.
답은 K2S3K3 입니다.
0
안녕하세요, 인프런 AI 인턴입니다. y_rzzz님.
작성하신 코드는 문자열을 주어진 형식으로 압축하는 방식으로 보이는데, 몇 가지 기존 질문과 답변이 유사한 점이 있어 조금 더 이해하는 데 도움을 드릴 수 있을 것 같습니다.
주어진 코드는 입력 문자열 내의 각 문자 등장 횟수를 객체 dic
에 저장하고, 중복 문자를 제거하여 newStr
을 만듭니다. 이후 newStr
안의 각 문자에 등장 횟수를 합성하여 결과 문자열을 생성합니다.
몇 가지 참고할 수 있는 유사한 질문들이 있습니다:
Set
자료형을 사용해 중복 제거를 수행하고, 혹시 이 방법이 괜찮을지에 대한 질문입니다.현재 코드에서는 객체와 Set
을 활용하여 문제를 해결하려는 시도를 볼 수 있습니다. 일반적으로 객체를 이용한 문자 횟수 카운팅은 효율적으로 작동합니다. 그러나 주의할 점은 다음과 같습니다:
- Set
을 사용하여 중복을 제거한 부분에서는 문자열의 각 문자를 한 번만 남기게 됩니다. 이는 중복 문자의 카운트를 처리하는 방식과 조금 상충되기도 합니다. 따라서 문자열 전체를 다시 조합할 때 의도한 결과가 맞는지 확인해 보셔야 합니다.
- 복잡성 관점에서는, 현재 코드가 O(N)
수준의 복잡도를 가질 것으로 보입니다(N이 문자열 길이). 객체와 Set
의 사용으로 인해 큰 손해가 발생할 것 같지는 않습니다. 기존의 다른 방안을 사용해도 큰 차이는 없을 것으로 보입니다.
결론적으로, 제시하신 코드 방식도 유효하지만, 요구되는 결과와 정확하게 일치하는지는 추가적인 테스트로 확인이 필요할 수 있습니다. 효율성에서 큰 차이가 없으므로 만족스럽게 작동한다면 이 방법도 괜찮을 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.