[프로그래머스] 가장 가까운 같은 글자

hwakyoung·2024년 4월 26일
0

코딩 테스트

목록 보기
1/6
post-thumbnail

👉🏻 문제

문자열 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]가 됩니다.


👉🏻 입출력 예시

업로드중..


👉🏻 문제 풀이

function solution(s) {
    //정답을 저장하는 배열
    var answer = [];
    //이미 등장한 문자열을 기록하는 배열
    let chk = [];
    
    for(let i=0; i<s.length; i++){
        if(!chk.includes(s[i])){
            answer.push(-1)
            chk.push(s[i])
        }else if(chk.includes(s[i])){
            
            //있으면 가장 최근에 나온 같은 문자와의 거리를 비교
            answer.push(i-chk.lastIndexOf(s[i]))
            chk.push(s[i])
        }
        
    }
    return answer;
}

answer배열에는 정답을 저장하고 chk배열에서는 최근에 이 글자가 나왔었나를 확인하는 배열이다

문자열이 끝날때까지 for문을 돌려 준 후.
만약에 chk배열이 s[i]를 포함하고 있지 않다면 answer배열에 -1을 넣어준다.
그런 후에 chk배열에 s[i] 를 넣어서 초기화를 시켜준다

만약에 chk배열 안에서 똑같은 글자를 가지고 있다면
answer에 최근에 나온 같은 문자와의 거리를 비교하여 answer 배열안에 넣어준다.
그리고 chk배열을 다시 초기화 해준다.

참고자료


세상에는 정말 천재들이 많다..

profile
fire-irror

0개의 댓글

관련 채용 정보