알고리즘 _ 아빠가 내 일기장 몰래 훔쳐봤지?

수원 개발자·2023년 10월 31일

JavaScript 알고리즘

목록 보기
1/5



출처 : 인프런 코드캠프_입문자를 위한 Javascript 알고리즘 이론+실습

const ALPHABET = "abcdefghijklmnopqrstuvwxyz";
function solution(str) {
// 여기에 코드를 작성하세요
	
	
}

solution("R dzmg gl vzg ggvlpylppr"); 
// "I want to eat tteokbokki"
solution("Xzgh ziv xfgv"); 
// "Cats are cute"

처음에는 어떻게 해야할지 감이 안 잡히는 문제였다.
먼저 세 가지 케이스가 있었다.

첫 번째는 " " 공백이다. 공백은 그냥 공백으로 처리해주면 된다.

두 번째는 대문자인 경우다. 이 때는 const 알파벳에는 대문자인 경우가 없으므로 먼저 대문자를 소문자로 변경해준다. 그리고 인덱스를 이용하여 변환된 문자를 찾은 후 그걸 다시 대문자 변경 함수를 이용하여 처리해주면 된다.

세 번째는 그냥 소문자인 케이스다. 이 경우에는 const 알파벳에서의 인덱스를 활용하여 변환된 문자를 찾으면 된다.

const ALPHABET = "abcdefghijklmnopqrstuvwxyz";

function solution(str) {
  let 해석본 = "";

  for (let i = 0; i < str.length; i++) {
    // 1. 공백인 경우
    if (str[i] === " ") {
      해석본 = 해석본 + " ";
      continue;
    }

    const 인덱스 = ALPHABET.indexOf(str[i]);
    // 2. 대문자인 경우
    if (인덱스 === -1) {
      const 대문자인덱스 = ALPHABET.indexOf(str[i].toLowerCase());
      해석본 =
        해석본 + ALPHABET[ALPHABET.length - 1 - 대문자인덱스].toUpperCase();
    } else {
      // 3. 소문자인 경우
      해석본 = 해석본 + ALPHABET[ALPHABET.length - 1 - 인덱스];
    }
  }

  return 해석본;
}


solution("R dzmg gl vzg ggvlpylppr"); 
// "I want to eat tteokbokki"
solution("Xzgh ziv xfgv"); 
// "Cats are cute"

인덱스가 0번인 a를 입력한다고 하면 a는 인덱스가 ALPHABET.length - 1번째인 z로 바뀐다.
인덱스가 1번인 b를 입력한다고 하면 b는 인덱스가 ALPHABET.length -1 에서 -1인 y로 바뀐다.
이런 식으로 인덱스가 i번이면 이는 인덱스가 (ALPHABET.length-1) - i인 문자로 바뀐다.

이를 사용해서 toLowerCase와 toUpperCase를 이용해서 대문자 소문자를 구분해주고 이를 해석본에 대해 리턴하면 값은 올바르게 해석되어서 나오게 된다.

0개의 댓글