๋ฆฌํŠธ์ฝ”๋“œ LeetCode 17 Letter Combinations of a Phone Number ๋ฌธ์ œ์˜ ํŒŒ์ด์ฌ python ํ’€์ด์ž…๋‹ˆ๋‹ค.

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



๋ฌธ์ œ

2์—์„œ 9๊นŒ์ง€ ์ˆซ์ž๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ ์ „ํ™” ๋ฒˆํ˜ธ๋กœ ์กฐํ•ฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋ฌธ์ž๋ฅผ ์ถœ๋ ฅํ•˜๋ผ.



ํ’€์ด

# ํฐ ๋ฒˆํ˜ธ ๋ฌธ์ž ์กฐํ•ฉ : ๋ชจ๋“  ์กฐํ•ฉ ํƒ์ƒ‰ (DFS)
 
class Solution:
ย  ย  def letterCombinations(self, digits: str) -> List[str]:
 
ย  ย  ย  ย  def dfs(index, path):
ย  ย  ย  ย  ย  ย  # ๋๊นŒ์ง€ ํƒ์ƒ‰ํ•˜๋ฉด ๋ฐฑํŠธ๋ž˜ํ‚น
ย  ย  ย  ย  ย  ย  if len(path) == len(digits):
ย  ย  ย  ย  ย  ย  ย  ย  result.append(path)
ย  ย  ย  ย  ย  ย  ย  ย  return
 
ย  ย  ย  ย  ย  ย  # ์ž…๋ ฅ๊ฐ’ ์ž๋ฆฟ์ˆ˜ ๋‹จ์œ„ ๋ฐ˜๋ณต
ย  ย  ย  ย  ย  ย  for i in range(index, len(digits)):
ย  ย  ย  ย  ย  ย  ย  ย  # ์ˆซ์ž์— ํ•ด๋‹นํ•˜๋Š” ๋ชจ๋“  ๋ฌธ์ž์—ด ๋ฐ˜๋ณต
ย  ย  ย  ย  ย  ย  ย  ย  for j in dic[digits[i]]:
ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  dfs(i+1, path+j) #path์— digits[i]์„ ๋”ํ•ด์„œ ๊ฐ€์ ธ๊ฐ
 
ย  ย  ย  ย  # ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
ย  ย  ย  ย  if not digits: # ์•„๋ฌด๊ฒƒ๋„ ์—†์„ ๋•Œ
ย  ย  ย  ย  ย  ย  return []
 
ย  ย  ย  ย  dic = {"2": "abc", "3": "def", "4": "ghi", "5": "jkl",
ย  ย  ย  ย  ย  ย  ย  ย "6": "mno", "7": "pqrs", "8": "tuv", "9": "wxyz"}
 
ย  ย  ย  ย  result = []
 
ย  ย  ย  ย  dfs(0, "")
 
ย  ย  ย  ย  return result
 

def dfs(index, path):
  • index: ํ˜„์žฌ ๋ช‡ ๋ฒˆ์งธ ์ˆซ์ž๋ฅผ ์ฒ˜๋ฆฌ ์ค‘์ธ์ง€ ๋‚˜ํƒ€๋ƒ„
  • path: ์ง€๊ธˆ๊นŒ์ง€ ์กฐํ•ฉํ•œ ๋ฌธ์ž๋“ค์„ ์ €์žฅํ•˜๋Š” ๋ฌธ์ž์—ด ์˜ˆ๋ฅผ ๋“ค์–ด, '2' โ†’ abc, '3' โ†’ def์ด๋ฉด
    • ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„์—์„œ 'a'๋ฅผ ์„ ํƒ โ†’ path = 'a'
    • ๋‘ ๋ฒˆ์งธ ๋‹จ๊ณ„์—์„œ 'd'๋ฅผ ์„ ํƒ โ†’ path = 'ad'
    • ๋๊นŒ์ง€ ์กฐํ•ฉ์ด ์™„๋ฃŒ๋˜๋ฉด โ†’ result.append('ad')

์ฆ‰, path๋Š” ํ˜„์žฌ ๋งŒ๋“ค๊ณ  ์žˆ๋Š” ์กฐํ•ฉ ์ค‘๊ฐ„ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.


์˜ˆ์‹œ

์ž…๋ ฅ: digits = "23"
๋”•์…”๋„ˆ๋ฆฌ:

dic = {"2": "abc", "3": "def"}

DFS ํ๋ฆ„

dfs(0, ""):
  โ”œโ”€ dfs(1, "a"):
  โ”‚   โ”œโ”€ dfs(2, "ad") โ†’ ๋ โ†’ ์ €์žฅ
  โ”‚   โ”œโ”€ dfs(2, "ae") โ†’ ๋ โ†’ ์ €์žฅ
  โ”‚   โ””โ”€ dfs(2, "af") โ†’ ๋ โ†’ ์ €์žฅ
  โ”œโ”€ dfs(1, "b"):
  โ”‚   โ”œโ”€ dfs(2, "bd") โ†’ ๋ โ†’ ์ €์žฅ
  โ”‚   โ”œโ”€ dfs(2, "be") โ†’ ๋ โ†’ ์ €์žฅ
  โ”‚   โ””โ”€ dfs(2, "bf") โ†’ ๋ โ†’ ์ €์žฅ
  โ”œโ”€ dfs(1, "c"):
      โ”œโ”€ dfs(2, "cd") โ†’ ๋ โ†’ ์ €์žฅ
      โ”œโ”€ dfs(2, "ce") โ†’ ๋ โ†’ ์ €์žฅ
      โ””โ”€ dfs(2, "cf") โ†’ ๋ โ†’ ์ €์žฅ
 

์žฌ๊ท€ ํ˜ธ์ถœ์„ ํ•˜๋ฉด์„œ ์ด ๋ฌธ์ž์—ด์„ ์ ์  ๊ธธ๊ฒŒ ๋งŒ๋“ค์–ด ๊ฐ€๋‹ค๊ฐ€, digits ๊ธธ์ด์™€ ๊ฐ™์•„์ง€๋ฉด ๊ฒฐ๊ณผ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.