N

(Leet Code JS)Letter Combinations of a Phone Number 본문

Leet Code 알고리즘

(Leet Code JS)Letter Combinations of a Phone Number

naeunchan 2022. 3. 22. 09:27
728x90
반응형

https://leetcode.com/problems/letter-combinations-of-a-phone-number/

 

Letter Combinations of a Phone Number - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

각 번호에 맵핑된 문자의 모든 조합을 찾아내는 문제.

완전 탐색으로 풀이.

 

dfs에 넘겨주는 인자는 (현재 문자열, 현재 digits의 인덱스, 현재 문자의 길이)다.

 

dfs 함수.

우선 digits[index]를 number형으로 바꿔서 digit 이라는 변수에 저장한다.

그리고 종료 조건인지 확인하여 answer에 push.

 

종료조건은 현재 문자열의 길이인 size가 length - 1과 같은지 확인한다.

같다면 for문을 통해 현재 digit에 해당하는 문자와 현재 문자열을 조합하여 answer에 push.

 

종료조건이 아니라면 계속 탐색을 진행한다.

0 ~ strings[digit].length 만큼 for문을 진행한다.

현재 문자열인 current에 strings[digit][i]를 조합한 후,

dfs에 다음 문자를 조합하면 된다.

넘겨주는 변수들은 (조합한 새로운 문자열, index + 1, size + 1)이다.

var letterCombinations = function(digits) {
    const answer = [];
    const strings = ["", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"];
    const length = digits.length;
    
    if(!digits.length){
        return [];
    }
    
    const dfs = (current, index, size) => {
        const digit = parseInt(digits[index]);
        
        if(size === length - 1){
            for(let i = 0; i < strings[digit].length; i++){
                answer.push(current + strings[digit][i]);
            }
            
            return;
        }
        
        for(let i = 0; i < strings[digit].length; i++){
            const string = current + strings[digit][i];
            
            dfs(string, index + 1, size + 1);
        }
    }
    
    dfs("", 0, 0);
    
    return answer;
};
728x90
반응형