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

JavaScript로 문자열의 ASCII 코드를 이용해 숫자를 만들고 7을 1로 바꾼 수와의 차이 구하기

문제 설명

문자열을 입력으로 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 다음과 같은 과정을 거쳐야 합니다.

먼저 문자열의 각 문자를 해당하는 ASCII 문자 코드로 변환한 뒤, 이 코드들을 모두 이어 붙여 하나의 큰 숫자를 만듭니다. 다음으로 이 숫자에서 등장하는 모든 71로 바꿔 또 다른 숫자를 만듭니다. 마지막으로 원래 숫자와 변경된 숫자의 차이를 반환하면 됩니다.

접근 방법

두 숫자의 자릿수 구성은 7이 있던 위치만 달라질 뿐 완전히 동일합니다. 따라서 실제로 거대한 숫자를 만들 필요 없이, ASCII 코드에서 등장하는 7의 개수만 세면 됩니다.

7 하나가 1로 바뀔 때마다 해당 자릿값은 정확히 6씩 줄어듭니다. 예를 들어 7이 십의 자리에 있다면 70 → 10이 되어 60의 차이가 발생하고, 일의 자리라면 7 → 1로 6의 차이가 발생합니다. 결국 (7의 개수) × 6이 곧 두 숫자의 차이가 됩니다.

예제 코드

const str = 'AVEHDKDDS';

const ASCIIDifference = (str = '') => {
  return str
    .split('')  // 문자열을 개별 문자 배열로 분리
    .map(c => c.charCodeAt(0))  // 각 문자를 ASCII 코드로 변환
    .join('')  // 코드들을 이어 붙여 하나의 숫자 문자열 생성
    .split('')  // 다시 한 글자씩 분리
    .map(Number)  // 각 자릿값을 숫자로 변환
    .filter(d => d === 7)  // 7인 자릿값만 추출
    .length * 6;  // 7의 개수 × 6 = 두 숫자의 차이
};

console.log(ASCIIDifference(str));

출력 결과

12

코드 설명

문자열 'AVEHDKDDS'의 각 문자를 ASCII 코드로 변환하면 A(65), V(86), E(69), H(72), D(68), K(75), D(68), D(68), S(83)이 되고, 이를 이어 붙이면 658669726875686883이라는 숫자가 됩니다.

이 숫자에는 7이 두 번 등장하므로, 7을 모두 1로 바꾸면 총 차이는 2 × 6 = 12가 됩니다. 이처럼 실제로 숫자를 치환하지 않고도 7의 개수만 세어 효율적으로 답을 구할 수 있습니다.