1309. Decrypt String from Alphabet to Integer Mapping

은유로그·2022년 1월 11일
0

👩‍💻 algorithm

목록 보기
6/11

오늘의 문제

한 줄 설명

숫자로 구성된 문자열을 입력받아 해당 번호에 대응하는 알파벳으로 치환하여 출력하는 문제

출처 👉 leetcode_1309


참고사항

  • 1의 자리 숫자와 10의 자리 숫자 구분을 위해 표현하고싶은 문자가 10의 자리 숫자면 문자 뒤에 #이 붙는다.

입출력 예시

입력: "10#11#12" string type
출력: "jkab" string type

  • 10#은 알파벳 10번째 문자 j에 대응
  • 11#은 알파벳 11번째 문자 k에 대응
  • 1은 알파벳 1번째 문자 a에 대응
  • 2은 알파벳 2번째 문자 b에 대응

수도코드

  1. 대응하는 알파벳 문자를 알기 위해 알파벳을 순서대로 담아둔 alphabets 배열을 생성한다.
  2. 입력 값을 한 글자씩 잘라 arr 배열에 할당한다.
  3. arr 배열의 요소를 하나씩 확인한다.
  4. 만약 요소가 #이면 앞 두 글자는 10의 자리를 나타내는 문자이므로 tensDigit 변수에 저장한다.
  5. tensDigit 변수에 담긴 값을 현재 인덱스보다 두 번째 앞 인덱스에 재할당한다.
  6. 현재 인덱스보다 첫 번째 앞 요소부터 2개의 값을 삭제한다.
  7. arr 배열의 요소를 하나씩 확인하여 alphabets 배열 요소에 맞게 치환한다. (숫자 -> 문자)
  8. arr 배열을 하나의 문자열로 합쳐 출력한다.

코드

var freqAlphabets = function(s) {
    const alphabets = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"];
    let arr = new Array;
    
    arr = s.split("");
    
    for(let i = 0; i < arr.length; i++){
      if(arr[i] === "#"){  
        let tensDigit = "";
        tensDigit = arr[i - 2] + arr[i - 1];
        arr[i - 2] = tensDigit;
        arr.splice(i - 1, 2);
      }
    }

    for(let i = 0; i < arr.length; i++){
      const idx = Number(arr[i]) - 1;
      arr[i] = alphabets[idx];
    }
    
    var result = arr.join("");
    
    return result;
};
profile
๑•‿•๑

0개의 댓글