[JS] Programmers 142086 가장 가까운 같은 글자

서연주·2023년 7월 10일
0

Algorithm

목록 보기
17/25

썸네일_제목은 PRGM 142086 가장 가까운 같은 글자, 부제목은 JavaScript, 분류는 Algorithm

'가장 가까운 같은 글자'

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;
}

참고 자료

profile
pizz@ttang

0개의 댓글