타입 챌린지 5140 - Trunc

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

타입챌린지

목록 보기
71/131

문제 링크

문제

Math.trunc의 타입 버전을 구현하라. 그것은 string과 number를 받고 모든 소수점을 없앤 정수 부분을 반환한다

Implement the type version of Math.trunc, which takes string or number and returns the integer part of a number by removing any fractional digits.

내 풀이


type NumberString=`${number}`|`${''|number}${`.${number}`|''}`

type Trunc<N extends number|NumberString>=
  `${N}` extends `${infer T}.${number}`?
    T extends `${number}`?
      T
      :`${T}0`
  :`${N}`

우선 N은 숫자 형태의 문자열 타입만 들어오도록 제한했다.

N의 문자열형 형태에 .이 포함되지 않는다면 N을 문자열 형태로 반환했다(문자열 형태의 값으로 반환하는 것이 문제의 숨겨진 요구사항이다.)

N의 문자열형 형태에 '.'이 포함된다면 한 번 더 분기를 사용한다.
만약 '.' 앞의 문자가 숫자 형태라면 ex)'-1','10' 등
그대로 반환하고,

'.' 앞의 문자가 숫자형태가 아니라면 ex)-, (빈 값)
그 문자 뒤에 0을 붙여 반환한다

의견

괴상한 문제이다.
괜히 '.123','-.32'과 같은 이상한 반례들이 있어 문제 풀이에 방해가 되는 것 같다

0개의 댓글