작성
·
158
0
모든 e를 찾아서 해당 위치를 배열에 담고, 루프를 돌려서 제일 최소 거리를 구해서 리턴 하게끔 만들었으나, 무언가 마음에 들지 않네요. 질문 올리고 강사님 강의를 바로 보겠습니다!
function solution(str, str2) {
const findAry = [];
for (let i = 0; i < str.length; i++) {
if (str[i] === str2) findAry.push(i);
}
return str.split("").map((v, index) => {
const max = [];
for (const value of findAry) {
max.push(Math.abs(value - index));
}
eturn max.sort((a, b) => a - b)[0];
});
}
console.log(solution("teachermode","e"));
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
rhkdtjd_12님, JavaScript로 문자열에서 특정 문자(e)까지의 최소 거리를 구하는 코드를 작성하셨군요.
제시해주신 코드는 이미 잘 작동하는 것 같지만, 더 효율적이거나 간결한 코드를 원하시는 경우에는 다음과 같은 접근방식을 생각해볼 수 있습니다.
아래는 이러한 개념을 이용한 개선된 코드 예시입니다.
function solution(s, t) {
const answer = [];
let p = 1000; // 충분히 큰 수로 초기화, 문자열 길이를 넘어서는 값
// 왼쪽 -> 오른쪽으로 탐색하면서 거리 계산
for (let i = 0; i < s.length; i++) {
if (s[i] === t) {
p = 0;
} else {
p++;
}
answer[i] = p;
}
p = 1000; // 다시 초기화
// 오른쪽 -> 왼쪽으로 탐색하면서 거리 갱신
for (let i = s.length - 1; i >= 0; i--) {
if (s[i] === t) {
p = 0;
} else {
p++;
}
answer[i] = Math.min(answer[i], p);
}
return answer;
}
console.log(solution("teachermode", "e"));
이 방법을 사용하면 루프를 더 적게 돌면서 같은 작업을 수행할 수 있어 효율성이 향상됩니다.
한 번 시도해보시고, 더 궁금한 점이 있으시면 언제든 문의하세요!