타입 챌린지 9142 - CheckRepeatedChars

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

타입챌린지

목록 보기
80/131

문제 링크

문제

S가 중복된 문자를 포함하고 있는지 반환하는 타입 CheckRepeatedChars<S>를 구현하시겠습니까?

Implement type CheckRepeatedChars<S> which will return whether type S contains duplicated chars?

내 풀이

type CheckRepeatedCharsImpelment<T extends string, U extends string=never>=
  T extends `${infer C}${infer R}`?
    C extends U?true
    :CheckRepeatedCharsImpelment<R,U|C>
  :false
type CheckRepeatedChars<T extends string> = CheckRepeatedCharsImpelment<T>

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

매 재귀에서 첫 번째 문자를 U에 넣는다.

첫번째 문자가 U에 있으면, 기존에 사용했다는 뜻이므로 true,
없으면 나머지 문자를 재귀적으로 반복한다. 이때, 호출하는 타입에는 기존에 사용했던 U와 함께, 지금 첫 번째 문자를 함께 넣어 (U|C) 호출한다.

만약 문자열이 비어있다면 중복된 문자가 없다는 뜻이므로 false를 반환한다.

0개의 댓글