Programmers '가장 가까운 같은 글자' 문제 보러가기
slice()
를 이용하여 현재 글자 앞까지 자른 문자열의 뒤에서부터 현재 글자와 같은 문자가 있는지 탐색하여 결과를 출력했다.
function solution(s) {
let answer=[];
// 현재 글자 앞까지를 기준으로 lastIndexOf 실행하기
// 없다면 -1(결과값 그대로) 출력
// 다르다면 차이를 출력하기
for(let i=0;i<s.length;i++){
const tempS = s.slice(0,i);
const idx = tempS.lastIndexOf(s[i]);
if(idx === -1){
answer.push(idx);
}
else{
answer.push(i-idx);
}
}
return answer;
}
*Lee Hee 님의 코드를 참고하였습니다
1. for문 대신 전개 연산자와 map
📌 전개 구문
전개 구문(Spread Syntax)는 ECMAScript6(2015)에서 새로 추가된 문법으로 객체, 배열, 문자열, 매개변수를 펼칠 수 있다.
- 원본 배열은 그대로 유지하면서 새로운 배열을 만듦으로 기존 배열을 보존해야할 때 유용하다.
- 다차원 배열 복사에는 유용하지 않다.(완전한 깊은 복사 ❌)
📌 for문과 forEach와 map
- for문은 조건을 확인하면서 계속 순회한다. break문을 사용 가능.
- forEach는 배열의 각 요소에 대해 callback을 실행한다. break문 사용 불가.
- map은 배열의 각 요소에 대해 callback 실행 & 모은 새 배열을 리턴한다. break문 사용 불가
function solution(s) {
let answer = [];
[...s].map((letter, i)=>{
const letterIdx = s.slice(0,i).lastIndexOf(letter);
let result = letterIdx === -1 ? letterIdx : i - letterIdx;
answer.push(result);
});
return answer;
}