문자열 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은 영어 소문자로만 이루어져 있습니다.
정답출처: https://school.programmers.co.kr/questions/51019
const frontCheck = {}
return s.split('').map((str,idx)=>{
if(frontCheck[str] !== undefined){
// 이미 존재하면 차이를 리턴하고 해당 idx로 갱신
const frontDistance = idx - frontCheck[str]
// 2(frontDistance) = 3(idx) - 1(frontCheck[str])
// frontCheck[str] 은 "banana"의 3번째 인덱스인 a를 키값으로 하는 value값(=1)
frontCheck[str] = idx // value 값 갱신
return frontDistance
}
else{
// 없을경우 해당 idx로 처음 갱신
frontCheck[str] = idx
return -1
} // {b: 1, a: 1, n: 1}
})
solution("banana")
let newAge = "age"
let obj = {}
obj.newAge = 1
// { age : 1 } 을 기대했지만
// { newAge : 1 } 가 나옴
let newAge = "age"
let obj = {}
obj[newAge] = 1
// { age : 1 }