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

JavaScript로 소프트웨어 라이선스 키 형식 지정하기

문제 상황

JavaScript에서 문자열 str을 첫 번째 인수로, 정수 n을 두 번째 인수로 받는 함수를 작성해야 합니다. 문자열 str은 영숫자(alphanumeric)와 하이픈(-)으로 구성되어 있습니다.

하이픈은 문자열 내의 영숫자들을 그룹으로 나누는 역할을 합니다. 즉, 하이픈이 n개 있다면 문자열은 n+1개의 그룹으로 분할됩니다. 다만 주어진 문자열에서 하이픈의 위치가 잘못 배치되어 있을 수 있습니다.

우리의 목표는 각 그룹이 정확히 K개의 문자를 가지도록 만드는 것입니다. 단, 첫 번째 그룹만 예외적으로 K보다 짧아도 되지만, 최소한 한 개 이상의 문자를 포함해야 합니다.

이 요구 사항을 충족하기 위해 하이픈을 다시 삽입해야 하며, 동시에 문자열 내 모든 소문자를 대문자로 변환해야 합니다.

예를 들어, 함수에 다음과 같이 입력된다면 −

const str = '8-4B0t37-k';
const num = 4;

출력 결과는 다음과 같아야 합니다 −

const output = '84B0-T37K';

출력 설명

문자열 str이 두 부분으로 나뉘었으며, 각 부분은 4개의 문자로 구성되어 있습니다.

구현 예제

이 문제를 해결하는 코드는 다음과 같습니다 −

const str = '8-4B0t37-k';
const num = 4;
const formatKey = (str = '', num = 1) => {
  let acc = '';
  let flag = num;
  for(let i = str.length - 1; i >= 0; i--){
    const char = str.charAt(i);
    if(char !== '-') {
      if(flag === 0) {
        acc = `-${acc}`;
        flag = num;
      };
      acc = `${char.toUpperCase()}${acc}`;
      flag -= 1;
    };
  };
  return acc;
};
console.log(formatKey(str, num));

코드 설명

formatKey() 함수에서 수행한 핵심 단계는 다음과 같습니다 −

  • 역방향 순회: 문자열을 뒤에서부터 앞으로 순회했습니다. 이렇게 하면 남은 문자 수가 num보다 적은 경우(첫 번째 그룹은 반드시 num개일 필요가 없으므로)를 자연스럽게 처리할 수 있습니다.

  • 문자 개수 카운트: 삽입된 문자의 개수를 계속 추적하다가, 카운트가 0이 되면 하이픈을 삽입하고 카운트를 num으로 초기화합니다.

실행 결과

콘솔에 출력되는 결과는 다음과 같습니다 −

84B0-T37K