[JS알고리즘] 가장 짧은 문자거리
in Algorithm
한 개의 문자열 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'));
- 변수(p)를 하나 설정한다(문자열의 길이 보다 큰값으로.. 예를 들어 1000)
- 찾는 문자열이 아닌경우는 변수(p)에 ++을 하고 찾는 문자열일 경우 변수를 0으로 설정한 뒤 answer배열에 push한다
- 앞에서 뒤로 도는 for문으로 answer배열에 들어가는 값은 = [1001, 0, 1, 2, 3, 0, 1, 2, 3, 4, 0] 이다
- 뒤에서 앞으로 도는 for문을 돌린다
t | e | a | c | h | e | r | m | o | d | e |
---|---|---|---|---|---|---|---|---|---|---|
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 자바스크립트 알고리즘 강의 내용 =)