str의 각 요소들과 "e"라는 문자와의 가장 짧은 거리를 구하는 문제이다.
1. 내 문제풀이방식
function solution(s, t) {
let answer = Array(s.length).fill(Number.MAX_SAFE_INTEGER);
const includeT = [];
//s 안의 t 문자좌표구하기
for (let i = 0; i < s.length; i++) {
if (s[i] === t) includeT.push(i);
}
//s의 인덱스에서 좌표값들을 뺀 결과값 중 제일 작은 숫자를 answer로 보내기
for (let i = 0; i < includeT.length; i++) {
for (let j = 0; j < s.length; j++) {
if (answer[j] > Math.abs(j - includeT[i])) answer[j] = Math.abs(j - includeT[i]);
}
}
return answer;
}
let str = 'teachermode';
console.log(solution(str, 'e'));
s 안의 t 문자좌표를 구한뒤, s의 인덱스와 좌표값들을 뺀 결과값 중 제일 가장 작은 숫자를 answer로 보낸다.
인덱스와 좌표값이 서로 같다면 0이라는 결과값이 나오게 될것이며,
서로 다르다면, 음수나 양수로 나오게 된다.
내가 원하는건 절대값이므로 Math.abs()를 통하여 절대값으로만 answer에 push()하도록 하였다.
2. 인프런 문제풀이방식
function solution(s, t){
let answer=[];
//왼쪽에서부터 "e"와의 거리 구하기
let p=1000;
for(let x of s){
if(x===t){
p=0;
answer.push(p);
}
else{
p++;
answer.push(p);
}
}
//오른쪽에서부터 "e"와의 거리 구하기
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'));
왼쪽과 오른쪽에서부터 t와의 거리를 구하고, 그 둘중 제일 작은 값을 answer에 push()하였다.
p를 이용한 이유는 양쪽 끝 인덱스에서는 거리를 구할 대상이 없기 때문이므로, 임시로 값을 지정한 것이다.
'📝 꾸준함이 무기 > Algorithm' 카테고리의 다른 글
[백준/Node.js] 10250 ACM 호텔 (0) | 2021.06.22 |
---|---|
[백준/Node.js] 4948 베르트랑 공준 (0) | 2021.06.16 |
[백준/Node.js] 2941 크로아티아 알파벳 (0) | 2021.06.15 |
[CT] 격자판 최대합 (0) | 2021.05.06 |
[CT] 등수구하기 (임의의 배열 만들기(초기화포함)) (0) | 2021.05.01 |