코딩테스트 하면서 자바스크립트 공부하기

voyager 999·2024년 2월 21일

JavaScript

목록 보기
19/19

오랜만에 자바스크립트 글🥹

중복을 허용하지 않는 자료구조 Set

Set은 자바스크립트에서 유일한 값을 저장하는 데 사용되는 내장 객체이다. 생성자 함수로 생성할 수 있고, 중복값을 허용하지 않는다는 특징이 있다. Set에는 숫자, 문자열, 객체, 배열 등 모든 유형의 값을 포함할 수 있다.

const mySet = new Set();

이 생성된 Set에 값 추가(add), 삭제(delete), 존재 여부 확인(has), 모든 값 삭제(clear), 갯수 확인(size) 등의 메서드를 사용해서 여러 가지 작업을 할 수 있다. 또한 배열에서 그랬던 것처럼 인덱스로 요소에 접근하는 것은 Set에서는 불가능하다.

mySet.add(1);
mySet.add(2);
mySet.add(3);
mySet.add(1); // 이미 존재하는 값이므로 무시됨

mySet.delete(2); // 값을 삭제하는 메서드

console.log(mySet.has(1)); // true
console.log(mySet.has(3)); // false

console.log(mySet.size); // 2

let numbers = [1, 2, 2, 3, 3, 4, 4, 4]

Set은 중복값을 허용하지 않는다는 특성이 있기 때문에, 이렇게 중복된 값이 들어 있는 배열 numbers가 있을 때 Set을 사용하여 중복값을 제외한 새로운 배열을 얻을 수 있다.

let newNumbers = [...new Set(numbers)];
console.log(newNumbers); // [1, 2, 3, 4]

첫번째 인덱스는 indexOf, 마지막 인덱스는 lastIndexOf

코딩테스트 '가장 가까운 글자' 문제를 거의 70프로 풀었다고 생각했는데 마지막 부분에서 막혀버렸다. 해결책은 lastIndexOf를 사용하는 것이었다.

배열의 indexOf() 메서드는 배열에서 주어진 요소를 찾을 수 있는 첫 번째 인덱스를 반환하고, 찾을 수 없는 경우 -1을 반환한다.

function solution(s) {
    var checkedStr = [];
    var answer = [];
    for (let i = 0 ; i < s.length ; i++) {
        let index = checkedStr.indexOf(s[i]) // for문 돌리며 현재 글자의 checkedStr 배열 내에서의 위치
        if (index === -1) { // 가 없다면 (첫등장하는 놈이라면)
            checkedStr.push(s[i]); // 글자를 배열에 집어넣고
            answer.push(-1); // -1을 반환한다.
        } else { // 가 있다면(재등장하는 놈이라면) 
            let lastIdx = checkedStr.lastIndexOf(s[i]); //checkedStr배열 내에서 해당 글자의 마지막 위치
            let distance = i - lastIdx; //현재 i와 lastIdx 사이의 인덱스 거리(차이)
            answer.push(distance); //를 반환한다.
            checkedStr.push(s[i]); //다 되고 나면 해당 문자를 배열에 집어넣는다.
        }
    }
    return answer;
}

0개의 댓글