TIL26-02 forEach(), lastIndexOf()의 활용

김태혁·2023년 2월 8일
0

TIL

목록 보기
83/205
  • 문제 설명
    문자열 s가 매개변수로 주어집니다. s에서 한 번만 등장하는 문자를 사전 순으로 정렬한 문자열을 return 하도록 solution 함수를 완성해보세요. 한 번만 등장하는 문자가 없을 경우 빈 문자열을 return 합니다.

    s result
    "abcabcadc" "d"
    "abdc" "abcd"
    "hello" "eho"
  • 풀이 과정

    • 문자열을 배열화 시킨 후에 각각의 원소가 중복이 있는지를 판단한다.
    • 중복여부를 판단하는 과정에서 for문도 돌려보고 아니면 그냥 문자열에 정규식을 써서 치환을 해볼까도 해보고 여러 시도를 해보았으나 중복값은 제거 되고, 그 문자는 그대로 남아 있어서 중복이 안되는 문자를 따로 빼기가 쉽지 않았다.
    • 밑에 코드는 실패 코드다.
function solution(s) {
    let a = s.split("").sort().join("")
    let b = a.replace(/\w{2}/g,"");
    console.log(b);
    return b.split("").sort().join(""); //정규식을 활용해서 풀어보았으나 제대로 된 값이 나오지 않았다.
}
console.log(solution("hello"));
  • 다른 사람의 풀이를 참고했고, lastIndexOf()를 통해 인덱스 위치값이 다르면 중복이 존재하는걸 확인할 수 있었다.
  • forEach()로 배열을 순회하여 인덱스값을 비교하였다.
function solution(s) {
    let ans = [];    
    let sArr = s.split("");    
    sArr.forEach((item) => {  //각 원소의 인덱스값이 마지막 인덱스값과 일치하지 않으면 중복된 문자가 있으므로 한번만 등장하지 않는다.
        if(s.indexOf(item) === s.lastIndexOf(item)){
            ans.push(item);
        }
    })    
    return ans.sort().join("");
}
  • 접근은 좋았으나 내장함수를 적절히 확인하지 못해 오래걸렸던 문제였다.
profile
도전을 즐기는 자

0개의 댓글