[프로그래머스] 한 번만 등장한 문자.JS

ungnam·2023년 6월 1일

programmers level0

목록 보기
13/29
post-thumbnail

https://school.programmers.co.kr/learn/courses/30/lessons/120896

나의 풀이

function solution(s) {
    let result = "";
    const charCount = {};
    
    for (const char of s) {
        charCount[char] = Object
            .keys(charCount)
            .includes(char) ?  ++charCount[char] : 1;
    }
    
    result = Object
        .entries((charCount))
        .filter(([k, v]) => v === 1)
        .map((v) => v[0])
        .sort((a, b) => a.charCodeAt(0) - b.charCodeAt(0))
        .join("");
    
    return result;
}

charCount 객체에 (key, value)(char, count)로 설정
charCodeAt 사용할 필요 없이 바로 sort() 하면 사전 순으로 정렬할 수 있다.
❗ 메서드 사용을 너무 남발해서 코드가 지저분해보인다.

function solution(s) {
    let result = [];
    const charCount = {};
    
    for (const char of s) {
        charCount[char] = Object
            .keys(charCount)
            .includes(char) ?  ++charCount[char] : 1;
    }
    
    for (const k in charCount) {
        if(charCount[k] === 1) result.push(k);
    }
    
    return result.sort().join("");
}

result를 배열로 선언하고, for ... in을 이용하였다. 조금은 코드가 더 보기 좋아진 모습이다.

참고할 만한 풀이

function solution(s) {
  	let result = [];
    for (const char of s) {
        if (s.indexOf(char) === s.lastIndexOf(char)) {
          result.push(char);
    }
	return result.sort().join("");
}

indexOflastIndexOf를 사용해서 같으면 문자가 한 번만 등장한 것이란 것을 활용한 방식이다.

전혀 생각지도 못한 방식이라 처음에 이 코드를 보고 감탄사를 자아냈다. 😲
lastIndexOf의 색다른 활용에 대해 알아가게 되었다.

profile
꾸준함을 잃지 말자.

0개의 댓글