한 개의 문자열 s와 문자 t가 주어지면 문자열 s의 각 문자가 문자 t와 떨어진 최소거리를 출 력하는 프로그램을 작성하세요.
첫 번째 줄에 문자열 s와 문자 t가 주어진다. 문자열과 문자는 소문자로만 주어집니다. 문자열의 길이는 100을 넘지 않는다.
첫 번째 줄에 각 문자열 s의 각 문자가 문자 t와 떨어진 거리를 순서대로 출력한다.
▣ 입력예제 1
▣ 출력예제 1
function solution(str, text) {
let answer = [];
let first = 1000;
for (let x of str) {
if (x === text) {
first = 0;
answer.push(first);
} else {
first++;
answer.push(first);
}
}
first = 1000; // 초기화
for (let i = str.length - 1; i >= 0; i--) {
if (str[i] === text) {
first = 0;
} else {
first++;
answer[i] = Math.min(answer[i], first);
}
}
return answer;
}
let str = "teachermode";
console.log(solution(str, "e")); // [1, 0, 1, 2, 1, 0, 1, 2, 2, 1, 0]
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"));
function solution(s, t) {
let answer = [];
let p = 1000;
// console.log(t); // e
for (let x of s) {
// console.log(x);
if (x === t) {
// x가 "e"와 같다면
p = 0;
answer.push(p);
} else {
// x가 "e"와 같지 않다면
p++;
answer.push(p);
}
// [1001, 0, 1, 2, 3, 0, 1, 2, 3, 4, 0]
}
// p는 다시 초기화 해준다.
p = 1000;
// s를 거꾸로 하나씩 돈다. (e, d, o, m, r, e, h ...)
for (let i = s.length - 1; i >= 0; i--) {
// console.log("i", s[i]); (e, d, o, m, r, e, h ...)
if (s[i] === t) {
p = 0;
} else {
p++;
answer[i] = Math.min(answer[i], p);
}
// [1, 0, 1, 2, 1, 0, 1, 2, 2, 1, 0]
}
return answer;
}
let str = "teachermode";
console.log(solution(str, "e")); // [1, 0, 1, 2, 1, 0, 1, 2, 2, 1, 0]
let str = "teachermode";
solution(str, "e");
let answer = [];
answer
에 빈 배열을 할당한다.let p = 1000;
p
를 생성한다. p
에 1000을 할당하는 이유는 문자열 teachermode
의 가장 첫번째 문자인 't'에는 왼쪽 타켓 문자인 'e'가 없기 때문에 이 왼쪽 타켓 문자("e")와의 거리를 대충 큰 숫자로 정하여 오른쪽 타켓 문자와의 거리가 채택되게 하려고 적당히 큰 숫자인 1000으로 할당한 것이다.t **e** a c h **e** r m o d **e**
for (let x of s) {
if (x === t) {
// x가 "e"와 같다면
p = 0;
answer.push(p);
} else {
// x가 "e"와 같지 않다면
p++;
answer.push(p);
}
// [1001, 0, 1, 2, 3, 0, 1, 2, 3, 4, 0]
}
t **e** a c h **e** r m o d **e**
1001 **0** 1 2 3 **0** 1 2 3 4 **0**
let p = 1000;
// s를 거꾸로 하나씩 돈다. (e, d, o, m, r, e, h ...)
for (let i = s.length - 1; i >= 0; i--) {
// console.log("i", s[i]); (e, d, o, m, r, e, h ...)
if (s[i] === t) {
p = 0;
// 이미 위에서 answer의 갯수를 맞췄기 때문에 여기서 다시 answer.push(p)를 할 필요가 없다.
} else {
}
}
answer[i]
([1001, 0, 1, 2, 3, 0, 1, 2, 3, 4, 0]) 를 비교했을 때 가장 작은 값(Math.min()
)을 구해서 반환해야 할 것이다.// s를 거꾸로 하나씩 돈다. (e, d, o, m, r, e, h ...)
for (let i = s.length - 1; i >= 0; i--) {
// console.log("i", s[i]); (e, d, o, m, r, e, h ...)
if (s[i] === t) {
p = 0;
} else {
p++;
// answer = [1001, 0, 1, 2, 3, 0, 1, 2, 3, 4, 0]
answer[i] = Math.min(answer[i], p);
}
// [1, 0, 1, 2, 1, 0, 1, 2, 2, 1, 0]
}
answer
를 반환한다.