타입 챌린지 27133 - Square

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

타입챌린지

목록 보기
97/131

문제 링크

문제

숫자가 주어지면, 그것의 제곱을 리턴하는 타입을 구현하라

Given a number, your type should return its square.

내 풀이


type SquareImplement<N extends number,Target extends any[]=[],Result extends any[]=[],Cnt extends any[]=[]>=
  Cnt['length'] extends N?Result['length']:
  Target['length'] extends N?SquareImplement<N,Target,[...Result,...Target],[...Cnt,1]>:
  SquareImplement<N,[...Target,1]>


type Square<N extends number> =`${N}` extends `-${infer R extends number}`?SquareImplement<R>:SquareImplement<N>

*참고로 해당 해설은 100이 넘어가는 문제를 해결하지 못한다. 100이 넘어가는 해설을 하기위해서는 추후 Multiply라는 고난이도의 문제의 해결 방식을 이용해 해결해야 한다.

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

구현용 타입에 양의 정수를 넣기 위해 절대값을 넣어주었다.

이후 재귀적으로 값을 넣으며 Target에 N의 값만큼 길이가 될 때까지 길이를 연장한다.

그리고 이후에는 Result에 Target을 spread로 넣으며 Cnt와 함께 늘려준다.
이후 Cnt가 N과 같아지면, Target의 요소를 Result에 N번 넣었다는 의미이므로, Result의 'length'를 반환한다.

0개의 댓글