//나의 풀이
function solution(str, alpa) {
let arr = [];
let arr2 = [];
let answer = [];
for (let i = 0; i < str.length; i++) {
if (str[i] === alpa) {
arr.push(i);
}
}
for (let i = 0; i < str.length; i++) {
arr2 = [];
for (const item of arr) {
arr2.push(Math.abs(item - i));
}
answer.push(Math.min(...arr2));
}
}
let str="teachermode";
console.log(solution(str, 'e'));
나의 풀이 과정은 최초 alpa의 값을 모두 찾아서 배열에 저장 후
해당 배열에 저장된 index 값과 현재 index 값을 뺀 후 그 중 제일 최솟값을 찾았다,
이중 for문을 사용해야만 풀 수 있는 문제인지 알고 이중 for문을 사용해 풀었는데 풀이 과정을 보고
나는 왜 저런 생각을 못했는가 이다.... 껄껄
function solution(str, alpa) {
let answer = [];
let idx = 1000;
for (let i = 0; i < str.length; i++) {
idx++;
if (str[i] === alpa) idx = 0;
answer.push(idx);
}
idx = 1000;
for (let i = str.length - 1; i >= 0; i--) {
idx++;
if (str[i] === alpa) idx = 0;
answer[i] = Math.min(answer[i], idx);
}
console.log(answer);
}
풀이 과정을 설명하자면 그냥 str 을 앞으로 한번 뒤로 한번 돌려서 alpa 값이 나올 때 마다 idx를 0으로 초기화 해주고
그게 아니라면 idx++ 을 해준 뒤 idx 값을 answer 배열 안에 집어 넣는 것이다, 다만 최초의 alpa 값이 나오기 전에 idx 값을 0으로 초기화 해주면 alpa 값과 무관한 idx 값이 answer 에 들어가기에 문제에서 주어진 '문자열의 길이 100' 보다 큰 수로 선언을 해준다 그렇게 되면 자연스럽게 우측에서 좌측으로 돌 때 1000보다 큰 수는 사라지게 될 것이다.
정말 뭐 이렇게 복잡하게 생각한 문제였을까 싶은 문제다
'알고리즘' 카테고리의 다른 글
멘토링(블루투포스) (0) | 2022.07.14 |
---|---|
뒤집은 소수 (0) | 2022.07.13 |
자릿수의 합 (0) | 2022.07.13 |
문자열 압축 (0) | 2022.07.12 |