TIL 20221209 - 155번

hoin_lee·2022년 12월 10일
0

TIL

목록 보기
120/236

오늘 공부

알고리즘 문제 풀기(프로그래머스)
https://github.com/hoinlee-moi/Algorithm

JS기본문법 다시 공부
https://github.com/hoinlee-moi/ModernJS

React 강의 듣기
https://github.com/hoinlee-moi/React_prac


일과 공부를 같이 한다는 게 참 쉬운 일이 아니긴 하다
어제는 공부를 거의 못했고 그러다보니 TIL 작성도 안한 게 쪼끔 아쉽지만 그래도 매일 30분 이상 하기는 지켰으니 다행이다

오늘 알고리즘

가장 가까운 같은 글자

예전에 배웠던 Map을 활용해 봤다.

function solution(s) {
    const map = new Map();
    let answer = [];
    for(let i=0; i<=s.length-1; i++){
        if(map.get(s[i])>=0){
            answer.push(i-map.get(s[i]))
        }else{
            answer.push(-1)
        }
        map.set(s[i],i)
    }
    return answer;
}
  • 먼저 오브젝트 객체를 만들 수 있는 Map을 생성한다.
  • 정답을 담을 배열 answer를 선언하고 주어진 문자열 s를 반복문 for를 이용해 돌린다.
  • 반복문을 돌 때마다 map안에 문자와 인덱스랄 key,value로 넣는다.
  • 이때 map안에 저장해둔 문자(객체)가 있다면 answer안에 인덱스(i)에서 객체의 value를 뺀 값을 넣는다
  • 그 이전에 해당 문자가 등장했을 때 인덱스 값을 저장해 두었기 때문에 또 문자가 등장했을 때의 인덱스 값에서 이전 등장 인덱스 값을 빼면 몇칸 앞에 있는지 나오기 때문

다른 사람 풀이를 보니 전부 객체를 이용했는데 객체는 Map을 이용할 수 있으니 거기서 거기 아닐까 싶다.
저번에 배웠던 Map을 활용할 수 있어서 좋았다
하지만 맨 처음 풀이할 땐 익숙치 않아서인지 살짝 버벅 거려서 아래와 같은 코드가 나왔는데 리팩토링 시켜 위와 같이 만들 수 있어서 다행이다.
이전 코드

function solution(s) {
    const map = new Map();
    let answer = [];
    s.split("").forEach((v,i)=>{
        if(map.get(v)>=0){
            answer.push(i-map.get(v))
            map.set(v,i)
        }else{
            map.set(v,i)
            answer.push(-1)
        }
    })
    return answer;
}
profile
https://mo-i-programmers.tistory.com/

0개의 댓글