far

[JS 알고리즘] 가장 짧은 문자거리 본문

알고리즘/알고리즘 베이스

[JS 알고리즘] 가장 짧은 문자거리

Eater 2023. 3. 25. 02:26

가장 짧은 문자거리

한 개의 문자열 s와 문자 t가 주어지면 문자열 s의 각 문자가 문자 t와 떨어진 최소거리를 출력하는 프로그램을 작성하세요.

 

입력설명
첫 번째 줄에 문자열 s와 문자 t가 주어진다. 문자열과 문자는 소문자로만 주어집니다.
문자열의 길이는 100을 넘지 않는다.

 

출력설명
첫 번째 줄에 각 문자열 s의 각 문자가 문자 t와 떨어진 거리를 순서대로 출력한다.

 

입력예제
teachermode e

 

출력예제
1 0 1 2 1 0 1 2 2 1 0

 

// 나의 풀이

function solution(s, t){
    let answer = [];
    let arr = s.split('');
    let num = 0

    for (let i = 0; s.length > i; i++) {
        if (arr.indexOf(t) > num) {
            num++
        } else if (arr.indexOf(t) < num) {
            num--
        }
        answer.push(num)
        arr.splice(0, 1)
    }

    return answer;
}

let str="teachermode";
console.log(solution(str, 'e'));

indexOf를 사용해 index의 위치에 따라 num을 변경하고 splice로 배열을 지워나가는 식으로 알고리즘을 짰다. (그러면 가장 가까운 e가 계속 갱신이 되기 때문에)

// 강의의 풀이

function solution(s, t){
    let answer=[];
    let p=1000; // 맨 앞이 제일 큰 수여야 오류 X
    for(let x of s){
        if(x===t){
            p=0;
            answer.push(p);
        }
        else{
            p++;
            answer.push(p);
        }
    }
    p=1000;
    for(let i=s.length-1; i>=0; i--){
        if(s[i]===t) p=0;
        else{
            p++;
            answer[i]=Math.min(answer[i], p);
        }
    }
    return answer;
}

let str="teachermode";
console.log(solution(str, 'e'));

for문을 두 번 사용해 앞으로 한번 가면서 배열을 채우고 다시 뒤로 돌아오면서 Math.min을 사용해 p값을 바꿔주는 형식.

Comments