[lv1] 가장 가까운 같은 글자

걸음걸음·2023년 2월 28일
0

Test

목록 보기
12/29

문제 링크

  • 문자열 s
  • 각 위치마다 자신보다 앞에 나온, 자신과 가장 가까운 곳에 있는 같은 글자와의 거리 return
  • 앞에 같은 글자가 없는 경우 -1로 표현
  • banana = [-1,-1,-1,2,2,2]
function solution(s) {
    // lastOfIndex 사용 lastIndexOf("찾을 문자열", "끝낼 위치")
    // [현재 문자의 위치] - [가장 가까이 있는 같은 문자의 위치]

    // // 첫글자는 무조건 -1
    const result = [-1];
    for(let i = 1; i<s.length; i++){
        // i 보다 앞에서 가장 가까운 같은 문자의 위치 탐색
        const position = s.lastIndexOf(s[i],i-1)
        if(position === -1){
            // 같은 문자가 없었을 땐 -1 그대로 추가
            result.push(position)
        } else {
            // 있으면 현재 문자 위치 - 가장 가까이 있는 같은 문자의 위치
            result.push(i-position)
        }
    }
    return result;
}

두번째 풀이

아직은 for 반복문이 쓰기 편해서 저걸로 먼저 작성하고 다른 메서드로 표현하는 방법을 찾았다.

function solution(s) {
    return [...s].map((ele, idx)=>{
        if(idx === 0) return -1;
        const position = s.lastIndexOf(ele,idx-1)
        if(position === -1){
            return(position)
        } else {
            return idx-position
        }
    })
}

다른 사람의 풀이

const solution = (s) =>
  [...s].map((char, i) => {
    const count = s.slice(0, i).lastIndexOf(char);
    return count < 0 ? count : i - count;
  });

두번째 풀이와 비슷하지만 중간 과정을 삼항연산자를 사용하여 더 간단하게 표현.

profile
꾸준히 나아가는 개발자입니다.

0개의 댓글