[우테코 프리코스] 알파벳 뒤집기

지원·2022년 11월 2일
0
post-thumbnail

🚀 기능 요구 사항

어느 연못에 엄마 말씀을 좀처럼 듣지 않는 청개구리가 살고 있었다. 청개구리는 엄마가 하는 말은 무엇이든 반대로 말하였다.

엄마 말씀 word가 매개변수로 주어질 때, 아래 청개구리 사전을 참고해 반대로 변환하여 return 하도록 solution 메서드를 완성하라.

ABCDEFGHIJKLMNOPQRSTUVWXYZ
ZYXWVUTSRQPONMLKJIHGFEDCBA

제한사항

  • word는 길이가 1 이상 1,000 이하인 문자열이다.
  • 알파벳 외의 문자는 변환하지 않는다.
  • 알파벳 대문자는 알파벳 대문자로, 알파벳 소문자는 알파벳 소문자로 변환한다.

실행 결과 예시

wordresult
"I love you""R olev blf"

기능 구현 단계

단계 1) 알파벳을 찾을 수 있는 array 만들기
단계 2) 대문자/소문자를 구별하는 함수 만들기
단계 3) parameter의 첫번째 값부터 차례대로 변환시켜 빈 배열에 넣어주기 (for문, indexOf, push 등 사용)
단계 4) 3)의 배열을 string 형태로 합쳐주기

기능 구현 과정

단계 1) 알파벳을 찾을 수 있는 array 만들기

    const alphabet = "abcdefghijklmnopqrstuvwxyz";
    const smallAbc = alphabet.split("");
    const bigAbc = alphabet.toUpperCase().split("");
    const maxIndex = alphabet.length - 1;
  • 나중에 해당 알파벳의 index를 사용하여 반대되는 알파벳을 찾을 생각으로, 내가 참조할 수 있는 index array를 만들었다.
  • 배열을 하나하나 쓰지 않고, alphabet이라는 소문자 string을 정의한 뒤, split과 toUpperCase()를 사용하여, 각각 소문자, 대문자 index Array 만들었음

단계 2) 대문자/소문자를 구별하는 함수 만들기

    const isUpperCase = (e) => {
        return e.toUpperCase() === e;
    };
  • 처음 코드를 작성할 때에는 이부분이 없었다.
  • 하지만 전체 코드를 다시 보는데, for문에 if문에 또 수많은 메서드들이 포함된 것을 보니 복잡해서 함수 구분의 필요성을 느꼈고, 대문자이면 true를 반환하는 isUpperCase 함수를 만들었다.

단계 3) parameter의 첫번째 값부터 차례대로 변환시켜 빈 배열에 넣어주기(for문, indexOf, push 등 사용)

    for (let i = 0; i < wordArr.length; i++) {
        if (wordArr[i] == " ") {
            answerArr.push(wordArr[i]);
        } else if (isUpperCase(wordArr[i])) {
            answerArr.push(bigAbc[maxIndex - bigAbc.indexOf(wordArr[i])]);
        } else if (!isUpperCase(wordArr[i])) {
            answerArr.push(smallAbc[maxIndex - smallAbc.indexOf(wordArr[i])]);
        }
    }
  • 여기서 중요했던 부분은 if (wordArr[i] == " ")를 첫번째에 써주는 것이다. 왜냐하면 공백은 isUpperCase함수를 true로 반환하기 때문
  • 처음에는 maxIndex값을 주지 않고 25라는 고정값으로 코드를 작성했는데, a-z 알파벳을 주지 않고, 다른 기준값을 줄 때를 대비하여 alphabet.length로 변수를 정의하였다.

단계 4) 3)의 배열을 string 형태로 합쳐주기

    answer = answerArr.join("");
    return answer;
  • join함수 사용하여 배열을 string으로 합쳐주고, answer return

전체 코드

function problem4(word) {
    var answer;
    const alphabet = "abcdefghijklmnopqrstuvwxyz";
    const smallAbc = alphabet.split("");
    const bigAbc = alphabet.toUpperCase().split("");
    const maxIndex = alphabet.length - 1;

    let wordArr = word.split("");
    let answerArr = [];

    const isUpperCase = (e) => {
        return e.toUpperCase() === e;
    };

    for (let i = 0; i < wordArr.length; i++) {
        if (wordArr[i] == " ") {
            answerArr.push(wordArr[i]);
        } else if (isUpperCase(wordArr[i])) {
            answerArr.push(bigAbc[maxIndex - bigAbc.indexOf(wordArr[i])]);
        } else if (!isUpperCase(wordArr[i])) {
            answerArr.push(smallAbc[maxIndex - smallAbc.indexOf(wordArr[i])]);
        }
    }
    answer = answerArr.join("");
    return answer;
}
profile
안녕하세요 지원입니다.

0개의 댓글