타입 챌린지 8767 - Combination

소파의 벨로그·2025년 5월 9일

타입챌린지

목록 보기
78/131

문제 링크

문제

문자열 배열이 주어지면, 순열과 조합을 수행해라

Given an array of strings, do Permutation & Combination.

내 풀이

type CombinationImplement<T extends string[],U extends string = T[number], D extends string = U> =
  D extends U?
    [Exclude<U,D>] extends [never]?
      D
    :`${D} ${CombinationImplement<T,Exclude<U,D>>}` | CombinationImplement<T,Exclude<U,D>>
    :never

type Combination<T extends string[]>=CombinationImplement<T>

우선 사용처에서 구현용 제네릭을 사용하지 못하게 하기 위해 구현과 실제 타입을 분리했다.

분배용인 D와 유니온을 지정할 U라는 제네릭을 사용하였다.

타입의 흐름은 다음과 같다.
1) U가 유니온 타입이 아닐 경우 (U에서 D를 제외할 때 never인 경우)
-> D를 반환한다
2) U가 유니온 타입일 경우
-> U에서 해당 D를 제외하고 조합한 값, 그리고 그 값을 D와 붙인 내용을 반환한다.

다른 사람의 풀이

type Combination<T extends string[], All = T[number], Item = All>
  = Item extends string
    ? Item | `${Item} ${Combination<[], Exclude<All, Item>>}`
    : never

내 풀이를 이겨봐:) 라는 도발성 제목의 풀이가 있어 가져와봤다.

참고자료

https://github.com/type-challenges/type-challenges/issues/11027

0개의 댓글