문자열 s와 문자 t가 주어지면 문자열 s의 각 문자가 문자 t와 떨어진 최소거리를 출력
나의 풀이
function solution(s, t) {
let answer = "";
let tArr = [];
let tIdx = s.indexOf(t);
let distance;
let nowDistance;
s = s.split("");
while (tIdx != -1) {
tArr.push(tIdx);
tIdx = s.indexOf(t, tIdx + 1);
}
for (let i = 0; i < s.length; i++) {
distance = Number.MAX_SAFE_INTEGER;
for (let j = 0; j < tArr.length; j++) {
nowDistance = Math.abs(s.indexOf(s[i], i) - tArr[j]);
if (nowDistance < distance) distance = nowDistance;
}
answer += distance;
}
return answer;
}
let str = "teachermode";
console.log(solution(str, "e"));
일단 문자열에 있는 t의 인덱스 값을 다 구해서 tArr 배열에 할당했다.
그래서 문자열을 돌며 현재 tArr의 값을 다 비교하며 가장 짧은 거리를 구했다.
이는 거리(distance)와 현재거리(nowDistance) 변수를 지정해서 풀었다.
강사 풀이
function solution2(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(solution2(str, "e"));
문자열의 오른쪽 방향으로 다 돌며 e와의 거리를 택한다
e를 아직 한번도 안만난 경우에는 1001, 1002 ... 이렇게 지정하도록 한다.
이들은 answer 배열에 push해둔다.
다 돌면 다시 문자열을 왼쪽 방향으로 다 돌며 e와의 거리를 구한다.
현재 값과 answer에 있는 값과 비교해서 더 작은값으로 재할당한다.
'코딩테스트 문제풀이 > inflearn' 카테고리의 다른 글
[인프런] Node.js / 섹션4 - 완전탐색(브루트포스) / 1. 자릿수의 합 (0) | 2023.01.19 |
---|---|
[인프런] Node.js / 섹션3 - 문자열 탐색 / 5. 문자열 압축 (0) | 2023.01.16 |
[인프런] Node.js / 섹션3 - 문자열 탐색 / 3. 숫자만 추출 (0) | 2023.01.14 |
[인프런] Node.js / 섹션3 - 문자열 탐색 / 2. 유효한 팰린드롬 (0) | 2023.01.12 |
[인프런] Node.js / 섹션3 - 문자열 탐색 / 1. 회문 문자열 (0) | 2023.01.12 |