[프로그래머스] LV.1 가장 가까운 같은 글자

혜연·2023년 10월 25일
0

JavaScript

목록 보기
11/13
post-thumbnail

...바보같이 허탕치다가 lastIndexOF로 살아난 문제

1. IndexOf(item,position)

문자열에서 특정 문자열을 찾을 때 사용한다. 첫번째로 검색된 문자의 인덱스만을 반환하고, 찾는 문자가 검색되지 않으면 -1을 반환한다.

item은 찾는 문자열, position은 문자를 어디서부터 탐색할지 나타낸다. 디폴트는 0으로 가장 처음부터 탐색하고 가장 먼저 발견된 문자의 인덱스를 반환한다.

let str = "banana";
console.log(str.indexOf("a",2));
//3

banana에서 인덱스 2위치의 n부터 시작해 a를 탐색하는 코드이다 . 3이 출력되는 것을 확인할 수 있다.

2. lastIndexOf(item,position)

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가 반환된다.

3. 문제로 알아보기

[프로그래머스] '가장 가까운 같은 글자'

문자열 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 없이 풀수가 있나..? 다른 사람들 풀이 보고올게요

0개의 댓글