다음과 같은 문자 매핑이 있다고 가정합니다. 여기에서 1에서 9까지의 각 숫자는 소수의 문자에 매핑됩니다.
1 -> ['A', 'B', 'C'] 2 -> ['D', 'E', 'F'] 3 -> ['G', 'H', 'I'] 4 -> ['J', 'K', 'L'] 5 -> ['M', 'N', 'O'] 6 -> ['P', 'Q', 'R'] 7 -> ['S', 'T', 'U'] 8 -> ['V', 'W', 'X'] 9 -> ['Y', 'Z']
숫자가 있는 경우 지정된 매핑 목록의 해당 문자로 숫자를 변경하고 생성된 모든 문자열을 표시해야 합니다. 숫자에서 숫자가 나타날 때마다 동일한 문자를 고려해야 합니다. 주어진 숫자는 0을 포함하지 않습니다.
따라서 입력이 [4,3,5]와 같으면 출력은
JGM KGM LGM JHM KHM LHM JIM KIM LIM JGN KGN LGN JHN KHN LHN JIN KIN LIN JGO KGO LGO JHO KHO LHO JIO KIO LIO
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- out :=새 목록
- temp :=새 목록
- char_map :=새 지도
- 색인:=0
- inp의 각 숫자에 대해 다음을 수행합니다.
- 숫자가 char_map에 없으면
- char_map[숫자] :=색인
- 임시 목록 지우기
- 0에서 테이블[digit - 1]의 크기 범위에 있는 i에 대해
- 인덱스가 0이면
- s :=테이블[숫자 - 1, i]
- 끝에 s 삽입
- 인덱스> 0이면
- 출력되는 각 문자열에 대해 다음을 수행합니다.
- s :=테이블[숫자 - 1, i]
- char_map[digit]이 인덱스와 같지 않으면
- :=문자열[char_map[숫자]]
- 문자열 :=문자열 연결 s
- temp의 끝에 문자열 삽입
- char_map[digit]이 인덱스와 같지 않으면
- s :=테이블[숫자 - 1, i]
- char_map[digit]이 인덱스와 같지 않으면
- 중단
- 출력되는 각 문자열에 대해 다음을 수행합니다.
- 인덱스> 0이면
- out :=임시 사본
- 인덱스 :=인덱스 + 1
- 인덱스가 0이면
- 반환
- 숫자가 char_map에 없으면
예
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
def findCombinations(inp, table): out = list() temp = list() char_map = dict() index = 0 for digit in inp: if digit not in char_map: char_map[digit] = index temp.clear() for i in range(len(table[digit - 1])): if index == 0: s = table[digit - 1][i] out.append(s) if index > 0: for string in out: s = table[digit - 1][i] if char_map[digit] != index: s = string[char_map[digit]] string = string + s temp.append(string) if char_map[digit] != index: break if index > 0: out = temp.copy() index += 1 return out mapping = [['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']] inp = [4,3,5] res = findCombinations(inp, mapping) for it in res: print(it, end=" ")
입력
[4,3,5]
출력
JGM KGM LGM JHM KHM LHM JIM KIM LIM JGN KGN LGN JHN KHN LHN JIN KIN LIN JGO KGO LGO JHO KHO LHO JIO KIO LIO