문제
마법의 문자열 str은 '1'과 '2'로만 구성되며 다음 규칙을 따릅니다. -
문자열 str은 문자 '1'과 '2'의 연속 발생 횟수를 연결하면 문자열 str 자체가 생성되기 때문에 마법과 같습니다.
문자열 str의 처음 몇 요소는 다음과 같습니다. -
str = "1221121221221121122……"
str에서 연속적인 '1'과 '2'를 그룹화하면 -
1 22 11 2 1 22 1 22 11 2 11 22 ......
각 그룹에서 '1' 또는 '2'의 발생은 -
1 2 2 1 1 2 1 2 2 1 2 2 ......
위의 발생 순서가 문자열 자체임을 알 수 있습니다.
입력으로 정수 num이 주어지고 마법 문자열 str의 첫 번째 num 숫자에서 '1'의 수를 반환해야 합니다.
예를 들어, 함수에 대한 입력이 -
인 경우const num = 6;
그러면 출력은 다음과 같아야 합니다. -
const output = 3;
출력 설명:
마법 문자열 S의 처음 6개 요소는 "12211"이고 3개의 1을 포함하므로 3을 반환합니다.
예시
이에 대한 코드는 -
const num = 6; const magicalString = (num = 1) => { let ind = 12; let str = '1221121221221121122'; while(str.length < num){ const end = str.substring(str.length - 1) === '2' ? '1' : '2'; str = parseInt(str.substring(ind, ind + 1)) === 2 ? str + end + end : str + end; ind++; }; return (str.substring(0, num).match(/1/g)||[]).length; }; console.log(magicalString(num));
출력
콘솔의 출력은 -
3