...바보같이 허탕치다가 lastIndexOF로 살아난 문제
문자열에서 특정 문자열을 찾을 때 사용한다. 첫번째로 검색된 문자의 인덱스만을 반환하고, 찾는 문자가 검색되지 않으면 -1을 반환한다.
item은 찾는 문자열, position은 문자를 어디서부터 탐색할지 나타낸다. 디폴트는 0으로 가장 처음부터 탐색하고 가장 먼저 발견된 문자의 인덱스를 반환한다.
let str = "banana";
console.log(str.indexOf("a",2));
//3
banana에서 인덱스 2위치의 n부터 시작해 a를 탐색하는 코드이다 . 3이 출력되는 것을 확인할 수 있다.
indexOf와 반대로 문자열 뒤에서 시작해 문자열을 탐색한다. 문자가 없으면 -1을 반환하고, 있으면 문자의 인덱스를 반환한다.
여기서 position은 indexOf에서의 position과 달리 문자열의 끝 인덱스를 의미한다.
let str = "banana";
console.log(str.lastIndexOf("n",3));//2
console.log(str.lastIndexOf("n",4));//4
str.lastIndexOf("n",3)
position이 3으로 str은 bana이 되고, 맨 뒤부터 n을 탐색하기에 2가 반환된다.
str.lastIndexOf("n",4)
position이 4로 str은 banan가 되고, 맨 뒤부터 n을 탐색하기에 4가 반환된다.
문자열 s가 주어졌을 때, 자신보다 앞에 나왔으면서, 자신과 가장 가까운 곳에 있는 같은 글자가 자신보다 몇 칸 앞에 나와있는지 반환하시오.
function solution(s) {
var answer = [];
answer = s.split('').map((item,index) => {
a = s.slice(0,index).indexOf(item);
if(a == -1) return -1;
if(a !== -1){
b = s.slice(0,index).lastIndexOf(item);
return index-b;
}
})
return answer;
}
slice(0,index)
를 통해서 자신의 앞 글자만 탐색할 수 있도록 해주었다. 자신과 같은 글자가 없을땐 -1을 반환한다.
indexOf를 통해 앞에서 부터 글자를 탐색하기에 -1을 반환하지 않은 경우에는 lastIndexOf를 통해 더 가까운 곳에 같은 글자가 존재하는지 한번 더 탐색한다.
같은 글자가 사이에 하나만 있다면 indexOf와 lastIndexOf 결과가 같게 되고, 같은 글자가 뒤에도 있다면 글자와 가장 가까운 위치의 인덱스가 lastIndexOf 결과에 담긴다.
자신보다 몇 칸 앞에 있는지 반환해야 하기에 자신의 index위치에서 lastIndexOf 값을 뺀 값이 정답이다!!
lastIndexOf 없이 풀수가 있나..? 다른 사람들 풀이 보고올게요