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



한 개의 문자열 s와 문자 t가 주어지면 문자열 s의 각 문자가 문자 t와 떨어진 최소거리를 출

력하는 프로그램을 작성하세요.


입력설명(문제가 이해가 가지 않으면 입력설명을 읽는다)

첫 번째 줄에 문자열 s와 문자 t가 주어진다. 문자열과 문자는 소문자로만 주어집니다.

문자열의 길이는 100을 넘지 않는다.

function solution(s, t){
  let answer=[];
  let p=1000;
  for(let x of s){	//왼쪽에서 오른쪽으로 도는 for
    if(x===t){
      p=0;
      answer.push(p);
    }
    else{
      p++;
      answer.push(p);
    }
  }
  p=1000;	//p초기화 해주어야함
  for(let i=s.length-1; i>=0; i--){	//오른쪽에서 왼쪽으로 도는 for. 거꾸로 도는거라 index로 구해야함
    if(s[i]===t) p=0; //'e'를 만나면 p는 0으로 세팅. 위 for문과 같음
    else{	//왼->오 for문과 오->왼 for문과 비교해서 더 작은 값을 answer에 넣는다
      p++;
      answer[i]=Math.min(answer[i], p);	//answer[i]와 p중에 더 작은 값으로 answer[i]에 넣어라
    }
  }
  return answer;
}

let str="teachermode";
console.log(solution(str, 'e'));
  1. 변수(p)를 하나 설정한다(문자열의 길이 보다 큰값으로.. 예를 들어 1000)
  2. 찾는 문자열이 아닌경우는 변수(p)에 ++을 하고 찾는 문자열일 경우 변수를 0으로 설정한 뒤 answer배열에 push한다
  3. 앞에서 뒤로 도는 for문으로 answer배열에 들어가는 값은 = [1001, 0, 1, 2, 3, 0, 1, 2, 3, 4, 0] 이다
  4. 뒤에서 앞으로 도는 for문을 돌린다
teachermode
1001
1
0
0
1
3
2
2
3
1
0
0
1
4
2
3
3
2
4
1
0
1000

첫번째 줄은 왼쪽으로부터 도는 for문이 e로 부터 떨어진 거리라면

두번째 줄은 오른쪽으로부터 도는 for문이 e로 부터 떨어진 거리이다.

최소거리라고 했으니 윗줄과 아랫줄의 p를 비교하는데 더 작은 값을 answer에 넣어주어야 한다.(최단거리를 구하라고 했으니)




inflearn 자바스크립트 알고리즘 강의 내용 =)




© 2018. by sora

Powered by sora