타입 챌린지 35045 - Longest Common Prefix

소파의 벨로그·2025년 6월 10일

타입챌린지

목록 보기
110/131

문제 링크

문제

문자열 튜플 사이에서 가장 긴 공통 접두사를 반환하는 LongestCommonPrefix를 작성하라.

만약 공동 접두사가 없다면 빈 문자열 ""를 반환하라.

Write a type, LongestCommonPrefix that returns the longest common prefix string amongst a tuple of strings.

If there is no common prefix, return an empty string "".

내 풀이

type IsUnion<T,U=T>=T extends U?
  [Exclude<U,T>] extends [never] ?false:true
  :never 

type LongestCommonPrefix<T extends string[], P extends string = ''> = 
  T extends `${P}${infer Middle extends string}${infer _}`[]?
    IsUnion<Middle> extends true?
      P
      :LongestCommonPrefix<T,`${P}${Middle}`>
  :P

T는 문자열 튜플, P는 현재까지 검증된 가장 긴 공통 접두사를 의미한다.

먼저 T가 P와 어떤 한 글자, 그리고 나머지 글자_로 이뤄져 있는지 확인한다.
그렇지 않다면 현재까지 검증된 가장 긴 공통 접두사를 반환한다.
그렇다면, 그 다음 글자가 Union인지 확인한다.(Union이면 배열의 모든 값이 같은 다음 글자를 가지지 않는다는 뜻이다. Union이 아니라면 모든 배열이 같은 전치사를 공유한다는 것이다)

이를 확인해서 다음 접두사를 확인할지를 확인한다.

0개의 댓글