티스토리 뷰

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
}
  1. 0번째 문자는 자신 앞에 같은 문자 없으므로 answer에 초기값으로 -1을 담음
  2. 1번째 문자부터 반복
    1. 현재 인덱스부터 0까지 거꾸로 반복하며 자신과 자신 앞의 문자들을 차례로 비교
      1. 같은 문자가 나왔을 때 인덱스의 차를 answer에 push하고 break를 이용해 내부 반복문(j) 빠져나옴
      2. j가 0이 되었다는 것은 자신 앞에 자신과 같은 문자가 없없다는 의미 -> answer에 -1 push
  3. answer 반환

 

다른 사람의 풀이

function solution(s) {
    return [...s].map((char, i) => {
        const equalIndex = s.slice(0, i).lastIndexOf(char)
        return equalIndex === -1 ? equalIndex : i - equalIndex
    })
}
  1. map()을 사용하기 위해 s를 배열로 만듦 (각 요소를 바로 함수의 반환값으로 대체해 새 배열 반환하기 위해 사용)
  2. map()을 이용해 s 순회
    1. slice() 이용해 0번째부터 i번째까지만 잘라서 비교 -> lastIndexOf() 이용해 역순으로 탐색하며 최초로 마주치는 인덱스값 반환
    2. 인덱스가 -1일 경우 같은 문자가 없다는 것이므로 -1 반환, 아닐 경우 비교 대상 인덱스 값에서 lastIndexOf()의 결과값을 뺀 값을 반환
  3. map의 return 값을 반환

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함