Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 숫자에 서수 접미사(st, nd, rd, th) 추가하기


문제 상황

하나의 숫자 num을 첫 번째 인자로 받아 처리하는 JavaScript 함수를 작성해야 합니다.

이 함수의 핵심 임무는 다음 규칙에 따라 숫자 뒤에 적절한 영어 서수 접미사('st', 'nd', 'rd', 'th')를 붙이는 것입니다.

  • st: 끝자리가 1인 숫자에 사용 (예: 1st — first로 발음)
  • nd: 끝자리가 2인 숫자에 사용 (예: 92nd — ninety-second로 발음)
  • rd: 끝자리가 3인 숫자에 사용 (예: 33rd — thirty-third로 발음)
  • 예외 규칙: 위 규칙과 달리, 11, 12, 13으로 끝나는 모든 숫자는 -th를 사용 (예: 11th — eleventh, 112th — one hundred [and] twelfth)
  • th: 그 외의 모든 숫자에 사용 (예: 9th — ninth)

예를 들어 함수에 다음과 같은 값이 입력된다고 가정해 보겠습니다.

입력

const num = 4513;

출력

const output = '4513th';

출력 설명

4513은 일의 자리가 3으로 끝나기 때문에 얼핏 'rd'를 붙여야 할 것처럼 보이지만, 마지막 두 자리가 13이므로 예외 케이스에 해당합니다. 따라서 'th'가 붙어야 올바른 결과입니다.

구현 코드

다음은 이 문제를 해결하는 코드입니다.

const num = 4513;
const appendText = (num = 1) => {
    let suffix = "th";
    if (num == 0) suffix = "";
    if (num % 10 == 1 && num % 100 != 11) suffix = "st";
    if (num % 10 == 2 && num % 100 != 12) suffix = "nd";
    if (num % 10 == 3 && num % 100 != 13) suffix = "rd";

    return num + suffix;
};
console.log(appendText(num));

실행 결과

4513th

코드 동작 원리

이 코드의 핵심은 나머지 연산자(%)를 활용한 조건 분기입니다.

  • num % 10: 숫자의 일의 자리 값을 구해 어떤 접미사가 필요한지 판단합니다.
  • num % 100: 마지막 두 자리 값을 확인하여 11, 12, 13이라는 예외 케이스를 걸러냅니다. 이 덕분에 4513처럼 3으로 끝나지만 13이 포함된 숫자에는 'th'가 유지됩니다.
  • 접미사 변수의 기본값을 'th'로 설정한 뒤, 각 조건에 해당할 때만 'st', 'nd', 'rd'로 덮어쓰는 방식이라 로직이 간결하고 가독성이 좋습니다.
  • 입력값이 0일 경우에는 접미사 없이 숫자만 그대로 반환하도록 처리했습니다.

이처럼 몇 줄의 조건문만으로 영어권 날짜 표기나 순위 표시에 널리 쓰이는 서수 형식을 손쉽게 구현할 수 있습니다.