# 알고리즘 문제풀이 3

hyunju-song·2020년 10월 2일
0

## ALGORITHM

목록 보기
3/14

### telephoneword 문제

recursion 활용한 또 다른 문제
이것도 가위바위보 문제의 변형으로 생각하고 풀면 될듯하다.

/*
* Each number key on a standard phone keypad has a set of Latin letters written on
*
* Businesses often try to come up with clever ways to spell out their phone number
* in advertisements to make it more memorable. But there are a lot of combinations!
*
* Write a function that takes up to four digits of a phone number, and
* returns a list of all of the words that can be written on the phone with
* that number. (You should return all permutations, not only English words.)
*
* Example:
*   telephoneWords('2745');
*   => ['APGJ',
*        'APGK',
*        'APGL',
*        ..., // many many more of these
*        'CSIL']
*
* Tips:
*   - Phone numbers are strings! (A phone number can start with a zero.)
*   - The digits 0 and 1 do not have letters associated with them, so they should be left as numbers.
*   - Don't return every combination of those digits in any order, just the order given.
*
*  Extra credit: There's a list of English dictionary words at /usr/share/dict/words .
*  Why not filter your results to only return words contained in that file?
*

var phoneDigitsToLetters = {
0: "0",
1: "1",
2: "ABC",
3: "DEF",
4: "GHI",
5: "JKL",
6: "MNO",
7: "PQRS",
8: "TUV",
9: "WXYZ",
};
*/
var telephoneWords = function (digitString) {
let results = [];

function recur(res2, count) {
if (count === digitString.length) {
results.push(res2.join(""));
//가위바위보랑 달리, 각 문자들을 문자열로 합해줘야해서 join을 써줬다.
} else {
let i = count;
//가위바위보는 for문을 써서, 재귀함수 돌때마다 다시 첫 문자들을 합쳐줬는데, 해당 문제는 주어진 인자에서 다시 앞으로 돌아가면 안된다.
let chars = phoneDigitsToLetters[digitString[i]].split("");
chars.forEach((ele) => {
recur(res2.concat(ele), count + 1);
});
}
}
recur([], 0);
return results;
};
코드 한 줄로, 세상의 가치를 만들자🌟