한 개의 문자열 s와 문자 t가 주어지면 문자열 s의 각 문자가 문자 t와 떨어진 최소거리를 출 력하는 프로그램을 작성하세요.
[입력설명]
첫 번째 줄에 문자열 s와 문자 t가 주어진다. 문자열과 문자는 소문자로만 주어집니다. 문자열의 길이는 100을 넘지 않는다.
[출력설명]
첫 번째 줄에 각 문자열 s의 각 문자가 문자 t와 떨어진 거리를 순서대로 출력한다.
teachermode e
10121012210
결과로 리턴해야하는 answer은 배열의 형태로 초기화하고, 변수 p를 통해 문자 t와 떨어져있는 거리를 측정한다.
(1) 왼쪽 e로부터 떨어진 거리(for문 방향이 왼쪽에서 오른쪽으로)
(2) 오른쪽 e로부터 떨어진 거리(for문 방향이 오른쪽에서 왼쪽으로)
(3) 1, 2번에서 구한 것 중, 작은값을 각 배열의 원소에 대입한다.(교체)
<html>
<head>
<meta charset="UTF-8">
<title>출력결과</title>
</head>
<body>
<script>
function solution(s, t){
let answer=[]; //answer은 배열
let p=100; //p는 충분히 큰 수(Number.MIN_SAFE_INTEGER)로 해주어도 되지만, 조건에서 문자열은 100을 넘지 않는다고 했으니까 이렇게 적어줌
//왼쪽에 'e'로부터 떨어진 거리(for문 왼쪽에서 시작)
for(let x of s){
if(x===t){
p=0;
answer.push(p);
}
else{
p++;
answer.push(p);
}
}
//오른쪽의 'e'로부터 떨어진 거리(for문 오른쪽에서 시작)
p=100; //초기화
for(let i=s.length-1; i>=0; i--){
if(s[i]===t){
p=0;
answer[i]=0; //생략 가능(어짜피 t가 있는 부분은 0이 들어있으니까)
}
else{
p++;
answer[i]=Math.min(answer[i], p); //기존 answer[i]와 현재 p중 작은값을 answer[i]에 집어넣는다(p가 더 작으면 교체가 이뤄짐)
}
}
return answer;
}
let str="teachermode";
console.log(solution(str, 'e'));
</script>
</body>
</html>
function solution(s, t){
let left=[];
let right=[];
let x=100;
//왼쪽 t와 떨어진 거리
for(let i=0; i<s.length; i++){
if(s[i]===t){
x=0;
left.push(x++);
}
else left.push(x++);
}
//오른쪽 t와 떨어진 거리
x=100;
for(let i=s.length-1; i>=0; i--){
if(s[i]===t){
x=0;
right.push(x++);
}
else right.push(x++);
}
right=right.reverse();
answer=[];
for(let i=0; i<left.length; i++){
if(left[i]<right[i]) answer.push(left[i]);
else answer.push(right[i]);
}
return answer.join('');
}
let str="teachermode";
console.log(solution(str, 'e'));
9/10