
문자열 s가 주어졌을 때, s의 각 위치마다 자신보다 앞에 나왔으면서, 자신과 가장 가까운 곳에 있는 같은 글자가 어디 있는지 알고 싶습니다.
예를 들어, s="banana"라고 할 때, 각 글자들을 왼쪽부터 오른쪽으로 읽어 나가면서 다음과 같이 진행할 수 있습니다.
b는 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.
a는 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.
n은 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.
a는 자신보다 두 칸 앞에 a가 있습니다. 이는 2로 표현합니다.
n도 자신보다 두 칸 앞에 n이 있습니다. 이는 2로 표현합니다.
a는 자신보다 두 칸, 네 칸 앞에 a가 있습니다. 이 중 가까운 것은 두 칸 앞이고, 이는 2로 표현합니다.
따라서 최종 결과물은 [-1, -1, -1, 2, 2, 2]가 됩니다.
문자열 s이 주어질 때, 위와 같이 정의된 연산을 수행하는 함수 solution을 완성해주세요.
1 ≤ s의 길이 ≤ 10,000
s은 영어 소문자로만 이루어져 있습니다.
function solution(s) {
var answer_arr = [];
var s_str = s; //substr함수를 쓰기 위해 문자열 형태의 변수를 만들었다.
s = s.split("");
for (i = 0; i < s.length; i++) {
var answer = -1; //중복 문자가 없으면 -1을 반환하기 위해
for (j = 0; j < i; j++) {
if (s[i] == s[j]) {
//중복 문자가 있으면
//기준 인덱스에 비교 인덱스를 뺀 값을 추출한다.
answer = i - s_str.substr(0, i).lastIndexOf(s[j]);
}
} //가장 큰 인덱스가 남아 배열에 저장된다.
answer_arr.push(answer);
}
return answer_arr;
}
말 그대로 검색을 앞에서가 아니라 뒤에서부터 찾기 시작함.
시작위치가 생략이 되었다고 하면 맨 끝에서부터 검색을 시작.
일치하는 결과값이 없으면 -1 리턴.
당장 과제 제출이 내일 정오까지인데 듣지못한 강의가 많고 해서 일단은 과제를 진행하고 중간중간 필요할때마다 강의를 들으면서 과제를 진행하자는 마인드로 과제를 시작했다.
너무 어렵다.. 어디서 시작해야할지 감도 안잡혀서 일단 발제 내용을 따라 진행을 해보고 있는데...내일까지 마무리가 될까..?싶다.
일단 하는데 까지 해봐야지...