[Easy] 1309. Decrypt String from Alphabet to Integer Mapping

문제

You are given a string s formed by digits and '#'. We want to map s to English lowercase characters as follows:

  • Characters ('a' to 'i') are represented by ('1' to '9') respectively.
  • Characters ('j' to 'z') are represented by ('10#' to '26#') respectively.

Return the string formed after mapping.

The test cases are generated so that a unique mapping will always exist.

 

s숫자 및 '#'로 구성된 문자열이 제공 됩니다. s다음과 같이 영어 소문자에 매핑하려고 합니다.

  • 문자( 'a'to ) 'i')는 각각 ( '1'to '9')로 표시됩니다.
  • 문자( 'j'to ) 'z')는 각각 ( '10#'to '26#')로 표시됩니다.

매핑 후에 형성된 문자열을 반환 합니다 .

고유한 매핑이 항상 존재하도록 테스트 케이스가 생성됩니다.

 

예시

Example 1:

Input: s = "10#11#12"
Output: "jkab"
Explanation: "j" -> "10#" , "k" -> "11#" , "a" -> "1" , "b" -> "2".

Example 2:

Input: s = "1326#"
Output: "acz"

 

제약 조건

Constraints:

  • 1 <= s.length <= 1000
  • s consists of digits and the '#' letter.
  • s will be a valid string such that mapping is always possible.

 

해결 과정

처음에 계속 console.log로 찍어도 undefined가 떠서 왜그러지? 했었는데 return을 해주니까 답이 나왔다. 이건 무슨 경우이지...😅

  • 매핑을 해줄 map 변수를 초기화한다.
  • 반환할 result 문자열 변수와, while문을 돌 때 사용할 count 변수도 초기화한다.
  • while문을 돈다. 이때 count가 s.length와 같거나 커지면 빠져나온다.
    • 만약 s[count+2]의 값이 '#'라면, 현재의 수는 00# 처리를 해주어야 한다.
      • 00#을 찾고, map에서 그 값을 찾아 매핑해준다.
    • 만약 s[count+2]의 값이 '#'가 아니라면, 현재의 수는 0 처리를 해주어야 한다.
      • 현재의 수를 map에서 찾아 매핑해준다.
    • 다음 인덱스를 탐색할 수 있도록 count++ 해준다.
  • while문을 빠져나오면 result 값을 반환한다.

해결 코드

/**
 * @param {string} s
 * @return {string}
 */
var freqAlphabets = function(s) {
    let map = {
        "1" : "a",
        "2" : "b",
        "3" : "c",
        "4" : "d",
        "5" : "e",
        "6" : "f",
        "7" : "g",
        "8" : "h",
        "9" : "i",
        "10#" : "j",
        "11#" : "k",
        "12#" : "l",
        "13#" : "m",
        "14#" : "n",
        "15#" : "o",
        "16#" : "p",
        "17#" : "q",
        "18#" : "r",
        "19#" : "s",
        "20#" : "t",
        "21#" : "u",
        "22#" : "v",
        "23#" : "w",
        "24#" : "x",
        "25#" : "y",
        "26#" : "z"
    }
    
    let result = "";    
    let count = 0;
    
    while(count < s.length){
          if(s[count+2] == '#') {
            result += map[s[count] + s[count + 1] +s[count + 2]];
            count += 2;
        } else {
            result += map[s[count]];
        }   
        count++;
    }
    return result;
};

'leetCode' 카테고리의 다른 글

[Easy] 1678. Goal Parser Interpretation  (0) 2022.06.02
[Easy] 953. Verifying an Alien Dictionary  (4) 2022.06.02
[Easy] 709. To Lower Case  (0) 2022.06.02
[Easy] 1768. Merge Strings Alternately  (0) 2022.06.02
[Easy] 1672. Richest Customer Wealth  (0) 2022.05.31