안녕하세요

우테코 프리코스 1주차 - 문제 2 본문

우테코 프리코스/1주차

우테코 프리코스 1주차 - 문제 2

sakuraop 2022. 10. 27. 23:12

https://github.com/youngentry/javascript-onboarding/blob/main/docs/PROBLEM2.md

🚀 기능 요구 사항

암호문을 좋아하는 괴짜 개발자 브라운이 이번에는 중복 문자를 이용한 새로운 암호를 만들었다. 예를 들어 "browoanoommnaon"이라는 암호문은 다음과 같은 순서로 해독할 수 있다.

  1. "browoanoommnaon"
  2. "browoannaon"
  3. "browoaaon"
  4. "browoon"
  5. "brown"

임의의 문자열 cryptogram이 매개변수로 주어질 때, 연속하는 중복 문자들을 삭제한 결과를 return 하도록 solution 메서드를 완성하라.

제한사항

  • cryptogram은 길이가 1 이상 1000 이하인 문자열이다.
  • cryptogram은 알파벳 소문자로만 이루어져 있다.

실행 결과 예시

cryptogramresult

"browoanoommnaon" "brown"
"zyelleyz" ""

 

 


 

 

아쉬운 점

  • 정규식을 이용하여 구현을 할 때는 편하지만, 해당 정규식을 기억하지 못하면 자신의 실력으로 남지 않을 것 같습니다.

 


// 1. a[i] == a[i+1] 인 문자열 찾기

// 2. 일치하는 문자열을 제외하기

// 3-1. 제외한 문자열로 일치하는 문자열이 없을 때까지 다시 시행하기
// 3-2. 정규식을 사용해 연속된 문자가 true인 조건일 때만 시행하기
// const reg = /(.)\1+/; 정규식으로 2개 이상 연속된 문자열 찾기 boolean

// 4. 결과를 반환하기

 

function problem2(cryptogram) {
    // splice 함수를 이용해 일치하는 문자열을 제외할 것입니다. 따라서 split함수로 문자열을 배열로 만듭니다.
    let resolvedWord = cryptogram.split("");

    // 1. 연속되는 문자열을 탐색합니다.
    const findRepetition = (word) => {
        for (i = 0; i < word.length; i++) {
            // 2. 연속되는 문자열을 발견하면,
            if (word[i] == word[i + 1]) {
                // 2. 해당 문자열과 그 다음 문자열을 배열에서 splice 함수로 제외합니다.
                resolvedWord.splice(i, 2);
                break;
            }
        }
    };

    //  3-2. 정규식으로 2개가 연속된 문자열 찾기 return boolean
    const reg = /(.)\1+/;

    // 3-1. 반복문은 "2개가 연속된 문자열이 존재"하면 계속 실행됩니다.
    while (reg.test(resolvedWord.join(""))) {
        // 3-1. 연속되는 문자열을 제외하는 함수를 실행합니다.
        findRepetition(resolvedWord);
    }
    // 배열을 문자열로 합친 결과를 반환합니다.
    return resolvedWord.join("");
}

problem2("browoanoommnaon");