개발자 되는 법.../코딩테스트...

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

개발_자 2024. 7. 16. 09:23

function solution(s) {
    var answer = [];
    let checkStr = [];
    for (let i = 0; i <s.length; i++) {
        if (!checkStr.includes(s[i])) {
            answer.push(-1);
            checkStr.push(s[i]);
            } else {
            answer.push(checkStr.length - checkStr.lastIndexOf(s[i]));
            checkStr.push(s[i]);
        }
    }
    return answer;
}

 

`lastIndexOf()`

문자열에서 특정 문자가

마지막으로 나타난 위치를 찾을 때 사용하는 메서드

 

`includes()`

array.includes(element, start)

 

배열이나 문자열에 특정 요소나 문자가 포함되어 있는지 확인하는 메서드

 

Bloolean 값 반환

포함되어 있으면 `true` 그렇지 않으면 `false`

 

`element` : 배열에서 찾고자 하는 요소

`start` (선택 사항) : 검색을 시작할 인덱스 기본값은 `0`

 

 

 

변수 초기화

`answer` : 결과를 저장할 빈 배열

`checkStr` : 문자의 존재 여부와 위치 추적할 배열

 

문자열 순회

 

문자 검삼

`if (!checkStr.includes(s[i])) {...} else {...}`

현재 문자가 `checkStr`에 포함되어 있는지 확인

 

- 포함되어 있지 않을 경우

`answer`배열에 `-1`추가

`checkStr` 배열에 현재 문자 추가

 

 - 포함되어 있을 경우

`checkStr`에서 현재 문자가 마지막으로 등장한 위치와

현재까지의 길이의 차이를 계산하여 `answer`배열에 추가

 

`checkStr`배열에 현재 문자를 추가

 

결과 반환

 

 

 


 

 

다른 사람 풀이

function solution(s) {
    const hash={};

    return [...s].map((v,i)=>{
        let result = hash[v] !== undefined ? i - hash[v] : -1;
        hash[v] = i;
        return result;
    });
}

 

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

 

`.map()`

array.map(callback(currentValue, index, array), thisArg)

배열의 각 요소에 대해 제공된 함수를 호출하고, 그 결과를 새로운 배열로 반환하는 메서드

 

 

`callback`: 각 요소에 대해 실행할 함수. 이 함수는 세 가지 인수를 가짐

- `currentValue`: 현재 처리되고 있는 요소

- `index` (선택 사항): 현재 처리되고 있는 요소의 인덱스

- `array` (선택 사항): `map()`을 호출한 배열

 

`thisArg` (선택 사항): `callback` 함수 내부에서 `this`로 사용할 값

 

 

여기서는 문자열을 배열로 변환하여 map을 사용

 

`.slice()`

배열 또는 문자열의 일부를 추출하여 새로운 배열 또는 문자열을 반환하는 메서드

 

여기서는 주어진 인덱스까지의 부분 문자열을 추출