본문 바로가기
Javascript/코딩테스트-연습

[JavaScript] 한 번만 등장한 문자 - 프로그래머스

by BeomBe 2024. 4. 2.
반응형

문제 설명

한번 등장한 문자만 뽑아서 오름차순 정렬

 

나의 풀이

앞서 문제설명에 적은것처럼 중복되지않은 단어를 찾고 오름차순으로 정렬한다고 생각했다.

function solution(s) {
    let answer = [];
    
    let input = s.split("");
    
    input.forEach((item) => {
        if(s.indexOf(item) === s.lastIndexOf(item)){
            answer.push(item);
        }
    })
    
    return answer.sort().join("");
}

 

lastIndexOf() - String

lastIndexOf() 메서드는 주어진 값과 일치하는 부분을 fromIndex로부터 역순으로 탐색하여, 최초로 마주치는 인덱스를 반환합니다. 일치하는 부분을 찾을 수 없으면 -1을 반환합니다.

//기본구문
str.lastIndexOf(searchValue[, fromIndex]) // fromIndex : Optional

 

searchValue : 탐색할 문자열, 빈 값을 제공할경우 fromIndex

fromIndex : 탐색의 시작점으로 사용할 인덱스

let anyString = "Brave new world";

console.log("시작점으로부터 처음 만나는 w의 위치는 " + anyString.indexOf("w"));
// logs 8
console.log(
  "끝점으로부터 처음 만나는 w의 위치는 " + anyString.lastIndexOf("w"),
);
// logs 10
console.log(
  '시작점으로부터 처음 만나는 "new"의 위치는 ' + anyString.indexOf("new"),
);
// logs 6
console.log(
  '끝점으로부터 처음 만나는 "new"의 위치는 ' + anyString.lastIndexOf("new"),
);
// logs 6

 

lastIndexOf() - Array

Array 인스턴스의 lastIndexOf() 메서드는 배열에서 특정 요소를 찾을 수 있는 마지막 인덱스를 반환하거나, 해당 요소가 없으면 -1을 반환합니다. 배열은 fromIndex에서 시작하여 역방향으로 검색됩니다.

//기본구문
lastIndexOf(searchElement)
lastIndexOf(searchElement, fromIndex)

 

searchElement : 배열에서 찾을 요소

fromIndex : 역방향 검색을 시작하는 0부터 시작하는 인덱스로, 정수로 변환

  • 음수 인덱스는 배열 끝에서부터 다시 계산됩니다. 만약 fromIndex < 0 이라면, fromIndex + array.length가 사용됩니다.
  • fromIndex < -array.length인 경우, 배열을 검색하지 않고 -1을 반환합니다. 개념적으로 배열이 시작되기 전 존재하지 않는 위치에서 시작해 그곳에서부터 거꾸로 가는 것이라고 생각하면 됩니다. 도중에 배열 요소가 없으므로 searchElement를 찾을 수 없습니다.
  • fromIndex >= array.length 또는 fromIndex를 생략하면, array.length - 1이 사용되어 전체 배열을 검색하게 됩니다. 개념적으로 배열 끝 너머 존재하지 않는 위치에서 시작하고 그곳에서부터 거꾸로 가는 것이라고 생각하면 됩니다. 결국 배열의 실제 끝 위치에 도달하고, 이 지점에서 실제 배열 요소를 통해 역순 검색을 시작합니다.

이 문제에 활용 될 수 있는 예제로는,

// lastIndexOf를 사용하여 주어진 배열에 있는 요소의 모든 인덱스를 찾고,
// 발견된 요소를 다른 배열에 추가하기 위해 push()를 사용합니다.

const indices = [];
const array = ["a", "b", "a", "c", "a", "d"];
const element = "a";
let idx = array.lastIndexOf(element);
while (idx !== -1) {
  indices.push(idx);
  idx = idx > 0 ? array.lastIndexOf(element, idx - 1) : -1;
}

console.log(indices);
// [4, 2, 0]

 

반응형