타입 챌린지 9898 - Appear only once

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

타입챌린지

목록 보기
84/131

문제 링크

문제

대상 배열 에서 오직 한 번만 나타나는 요소를 찾아라

Find the elements in the target array that appear only once.

내 풀이

type EqaulIncludes<T extends any[],Target>=
  T extends [infer Start,...infer Rest]?
    Equal<Target,Start> extends true?true
    :EqaulIncludes<Rest,Target>
  :false

type FindElesImplement<T extends any[], Used extends any[]=[]>=
  T extends [infer First, ...infer Rest]?
    EqaulIncludes<[...Used,...Rest],First> extends true?
      FindElesImplement<Rest,[...Used,First]>
      :[First,...FindElesImplement<Rest,[...Used,First]>]
    :[]

type FindEles<T extends any[]> = FindElesImplement<T>

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

사용처에서 number등 여러 타입을 포함하는 타입이 T에 올 수 있기 때문에, 확실히 같은 타입인지를 확인하기 위해서 Eqaul을 통해 배열 내부에 같은 값이 존재하는 지 확인했다.

재귀적으로 확인하여 최종적으로 Result를 반환한다.

0개의 댓글