본문 바로가기
Front-End/Algorithm

[알고리즘] 가장 짧은 문자거리 구하기

by 민바이민 2021. 5. 22.

 

❓ 입력받은 문자열과 문자가 있을 때, 문자를 기준으로 하는 가장 짧은 거리를 구하시오

 

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

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

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

입력예제 1 teachermode e

출력예제 1 10121012210

 

💡 문제풀이

function solution(s, t) {
    let answer = [];
    let p = 1000;
    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'));

 

1) p를 임의로 받은 문자열보다 큰 숫자로 정합니다. 1000, 2000, 10000 상관 없습니다.

2) for문을 순차적으로 1번 돌고(기준 문자에서 오른쪽으로 몇칸 떨어졌는지) , 역순으로 1번 돌면서 비교해줍니다.(기준 문자에서 왼쪽으로 몇칸 떨어졌는지)

3) for문을 순차적으로 도는 과정 중에, 입력받은 문자를 만나면 p를 0으로 바꿔주고, answer배열에 추가시켜줍니다. 입력받은 문자와 다르면 p를 1씩 더해줍니다.

4) 역순 for문을 돌건데, 이전에 p를 초기화 시켜줍니다.

5) 역순으로 도는 과정중 입력받은 문자를 만나면 p를 0으로 초기화 시키고, 아니라면 p를 1더해줍니다. 그리고 answer배열 해당하는 index값에 기존의 배열값과 비교하여 더 작은 숫자를 넣어줍니다.

댓글