나만보는개발공부블로그

[PCCP모의고사] 외톨이 알파벳 - Javascript 본문

Algorithms

[PCCP모의고사] 외톨이 알파벳 - Javascript

alexrider94 2023. 9. 10. 15:25

문제

알파벳 소문자로만 이루어진 어떤 문자열에서, 2회 이상 나타난 알파벳이 2개 이상의 부분으로 나뉘어 있으면 외톨이 알파벳이라고 정의합니다.

 

문자열 "edeaaabbccd"를 예시로 들어보면,

  • a는 2회 이상 나타나지만, 하나의 덩어리로 뭉쳐있으므로 외톨이 알파벳이 아닙니다.
    • "ede(aaa)bbccd"
  • b, c도 a와 같은 이유로 외톨이 알파벳이 아닙니다.
  • d는 2회 나타나면서, 2개의 부분으로 나뉘어 있으므로 외톨이 알파벳입니다.
    • "e(d)eaaabbcc(d)"
  • e도 d와 같은 이유로 외톨이 알파벳입니다.

문자열 "eeddee"를 예시로 들어보면,

  • e는 4회 나타나면서, 2개의 부분으로 나뉘어 있으므로 외톨이 알파벳입니다.
    • "(ee)dd(ee)"
  • d는 2회 나타나지만, 하나의 덩어리로 뭉쳐있으므로 외톨이 알파벳이 아닙니다.
    • "ee(dd)ee"

문자열 input_string이 주어졌을 때, 외톨이 알파벳들을 알파벳순으로 이어 붙인 문자열을 return 하도록 solution 함수를 완성해주세요. 만약, 외톨이 알파벳이 없다면 문자열 "N"을 return 합니다.

입출력 예

input_string result
"edeaaabbccd" "de"
"eeddee" "e"
"string" "N"
"zbzbz" "bz"

자바스크립트 코드

function solution(input_string) {
    let result = [];
    
    let map = {};
    for(let i = 0; i<input_string.length; ++i){
        if(input_string[i] !== input_string[i+1]){
            if(map[input_string[i]]) {
                map[input_string[i]]++;
            } else {
                map[input_string[i]] = 1;
            }   
        }
    }
    for(let [k,v] of Object.entries(map)) {
        if(v > 1) {
            result.push(k);
        }
    }
    

    if(result.length){
        result.sort();
        return result.join("");
    } else {
        return 'N';
    }
    
}