본문 바로가기

알고리즘

문자거리

 

//나의 풀이
function solution(str, alpa) {
    let arr = [];
    let arr2 = [];
    let answer = [];
    for (let i = 0; i < str.length; i++) {
        if (str[i] === alpa) {
            arr.push(i);
        }
    }

    for (let i = 0; i < str.length; i++) {
        arr2 = [];
        for (const item of arr) {
            arr2.push(Math.abs(item - i));
        }
        answer.push(Math.min(...arr2));
    }
}

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

나의 풀이 과정은 최초 alpa의  값을 모두 찾아서 배열에 저장 후

해당 배열에 저장된 index 값과 현재 index 값을 뺀 후 그 중 제일 최솟값을 찾았다,

이중 for문을 사용해야만 풀 수 있는 문제인지 알고 이중 for문을 사용해 풀었는데 풀이 과정을 보고

나는 왜 저런 생각을 못했는가 이다.... 껄껄

 

 function solution(str, alpa) {
    let answer = [];
    let idx = 1000;
    for (let i = 0; i < str.length; i++) {
        idx++;
        if (str[i] === alpa) idx = 0;
        answer.push(idx);
    }

    idx = 1000;
    for (let i = str.length - 1; i >= 0; i--) {
        idx++;
        if (str[i] === alpa) idx = 0;
        answer[i] = Math.min(answer[i], idx);
    }

    console.log(answer);
}

풀이 과정을 설명하자면 그냥 str 을 앞으로 한번 뒤로 한번 돌려서 alpa 값이 나올 때 마다 idx를 0으로 초기화 해주고

그게 아니라면 idx++ 을 해준 뒤  idx 값을 answer 배열 안에 집어 넣는 것이다, 다만 최초의 alpa 값이 나오기 전에 idx 값을 0으로 초기화 해주면  alpa 값과 무관한 idx 값이 answer 에 들어가기에 문제에서 주어진  '문자열의 길이 100' 보다 큰 수로 선언을 해준다 그렇게 되면 자연스럽게 우측에서 좌측으로 돌 때 1000보다 큰 수는 사라지게 될 것이다.

 

정말 뭐 이렇게 복잡하게 생각한 문제였을까 싶은 문제다

'알고리즘' 카테고리의 다른 글

멘토링(블루투포스)  (0) 2022.07.14
뒤집은 소수  (0) 2022.07.13
자릿수의 합  (0) 2022.07.13
문자열 압축  (0) 2022.07.12