티스토리 뷰
https://school.programmers.co.kr/learn/courses/30/lessons/142086
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
function solution(s) {
const answer = [-1]
for(let i = 1; i < s.length; i++) {
for(let j = i - 1; j >= 0; j--) {
if(s[i] === s[j]) {
answer.push(i - j)
break
}
if(j === 0) {
answer.push(-1)
}
}
}
return answer
}
- 0번째 문자는 자신 앞에 같은 문자 없으므로 answer에 초기값으로 -1을 담음
- 1번째 문자부터 반복
- 현재 인덱스부터 0까지 거꾸로 반복하며 자신과 자신 앞의 문자들을 차례로 비교
- 같은 문자가 나왔을 때 인덱스의 차를 answer에 push하고 break를 이용해 내부 반복문(j) 빠져나옴
- j가 0이 되었다는 것은 자신 앞에 자신과 같은 문자가 없없다는 의미 -> answer에 -1 push
- 현재 인덱스부터 0까지 거꾸로 반복하며 자신과 자신 앞의 문자들을 차례로 비교
- answer 반환
다른 사람의 풀이
function solution(s) {
return [...s].map((char, i) => {
const equalIndex = s.slice(0, i).lastIndexOf(char)
return equalIndex === -1 ? equalIndex : i - equalIndex
})
}
- map()을 사용하기 위해 s를 배열로 만듦 (각 요소를 바로 함수의 반환값으로 대체해 새 배열 반환하기 위해 사용)
- map()을 이용해 s 순회
- slice() 이용해 0번째부터 i번째까지만 잘라서 비교 -> lastIndexOf() 이용해 역순으로 탐색하며 최초로 마주치는 인덱스값 반환
- 인덱스가 -1일 경우 같은 문자가 없다는 것이므로 -1 반환, 아닐 경우 비교 대상 인덱스 값에서 lastIndexOf()의 결과값을 뺀 값을 반환
- map의 return 값을 반환
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv.0 - 문자열 나누기 (javascript) (0) | 2023.01.28 |
---|---|
[프로그래머스] Lv.0 - 숫자 짝꿍 (javascript) (0) | 2023.01.27 |
[프로그래머스] Lv.0 - 대문자와 소문자 (javascript) (0) | 2023.01.25 |
[프로그래머스] Lv.0 - 숫자 찾기 (javascript) (0) | 2023.01.24 |
[프로그래머스] Lv.0 - 세균 증식 (javascript) (0) | 2023.01.23 |
댓글