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

박기영·2022년 12월 11일
1

프로그래머스

목록 보기
108/159
post-custom-banner

solution

function solution(s) {
    let stack = [];
    let ans = [];
    
    for(let i = 0; i < s.length; i++){
        if(!stack.includes(s[i])){
            ans.push(-1);
            stack.push(s[i]);
            continue;
        }
        
        if(stack.includes(s[i])){
            ans.push(stack.length - stack.lastIndexOf(s[i]));
            stack.push(s[i]);
            continue;
        }
    }
    
    return ans;
}

방법은 다음과 같다.

스택이 있고, 그 곳에는 문자열이 하나씩 들어갈 것이다.

우선 스택을 확인한다. 현재 넣으려는 문자열이 존재하지 않는다면 -1ans에 넣는다.
그리고 스택에 그 문자열을 넣어준다.
그 뒤에 있는 코드가 실행되지 않도록 continue 처리도 해준다.

스택을 확인한다. 현재 넣으려는 문자열이 존재한다면
스택의 길이 - 스택 가장 위쪽에 있는 해당 문자열의 인덱스ans에 넣는다.
그리고 스택에 문자열을 넣어준다.

스택 가장 위쪽에 있는 해당 문자열의 인덱스는 가장 가까운 문자열을 찾기 위함이고,
그 것이 현재 넣으려는 문자열과 얼마나 떨어져 있는지를 보기 위해서 스택의 길이에서 인덱스를 뺀다.

for 대신 고차 함수를 사용한 풀이는 다음과 같다.

function solution(s) {
    let stack = [];
    let ans = [];
    
    [...s].forEach((str) => {
        if(!stack.includes(str)){
            ans.push(-1);
        }
              
        if(stack.includes(str)){
            ans.push(stack.length - stack.lastIndexOf(str));
        }
                   
        stack.push(str);
    })
    
    return ans;
}
profile
나를 믿는 사람들을, 실망시키지 않도록
post-custom-banner

0개의 댓글