본문 바로가기
기초다지기/JS 코딩테스트

javaScript 문자열 중복에 따라 배열 만들기

by 김빵그 2023. 11. 16.

문제

변수 문자열이 주어질때 각 알파벳을 비교하여 중복되지 않으면 -1을 중복시에는 몇칸 앞에 있는지 수를 배열로 리턴

나의 풀이 

function solution(s) {
    var answer = [];
    var lastIndex = {};
    
    for(let i = 0; i < s.length; i++) {
       if (s[i] in lastIndex) {
            answer.push(i - lastIndex[s[i]]);
           // console.log(lastIndex)
        } else {
            answer.push(-1);
        }
        
        lastIndex[s[i]] = i;
        // console.log(lastIndex)
    }
    return answer;
}
  • answer : 최종 결과를 저장하는 배열
  • lastIndex : 문자열에서 각 문자의 마지막 인덱스를 추적하는 객체
  • for
    • 문자열 s의 각 문자를 반복 
    • 현재문자 s[i]가 lastIndex 객체에 존재하는지 확인후 있다면 현재 인덱스 i와 lastIndes[s[i]]에 저장된 마지막 인덱스간의 차이를 계산하고 answer 배열에 추가
    • 문자가 이전에 나타나지 않았다면 answer 배열에 -1 추가
  • 각 문자를 처리후에 현재 인덱스로 lastIndex 객체 업데이트

다른 풀이 

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

    return [...s].map((v,i)=>{
        let result = hash[v] !== undefined ? i - hash[v] : -1;
        hash[v] = i;
        return result;
    });
}
  • 객체와 배열을 사용
  • 각 문자에 대해 map 함수를 이용하여 현재 문자 v와 인덱스 i를 받아온다 
  • 현재 문자 v가 이전에 나타난 적이 있는지 확인후 있으면 i 와 hash[v]에 저장된 이전 인덱스 간의 차이 계산
  • hash[v]를 현재 인덱스로 업데이트 한다
const solution = (s) =>
  [...s].map((char, i) => {
    const count = s.slice(0, i).lastIndexOf(char);
    return count < 0 ? count : i - count;
  });
  • 현재 인덱스 i 이전의 부분문자열을 생성해 char의 마지막 인덱스를 찾아 계산