문제 정의
문자열을 인자로 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 문자열의 모든 문자를 해당 아스키(ASCII) 코드의 16진수(hex) 값으로 변환한 뒤, 변환된 16진수 문자열에 포함된 숫자들만 추출하여 그 합계를 반환해야 합니다. 단, 16진수 표현에 등장하는 알파벳 문자(a~f)와 0은 무시합니다.
예제 코드
다음은 위 문제를 해결하는 코드입니다.
const str = "Hello, World!";
const toHexAndSum = (str = '') => {
return str
.split('')
.map(c=>c.charCodeAt())
.map(n=>n.toString(16))
.join('')
.split('')
.filter(c=>'123456789'.includes(c))
.map(d=>parseInt(d))
.reduce((a, b)=>a+b, 0)
};
console.log(toHexAndSum(str));
코드 동작 원리
이 코드는 메서드 체이닝을 활용해 다음 단계로 동작합니다.
- split('') — 문자열을 개별 문자 배열로 분리합니다.
- charCodeAt() — 각 문자를 아스키 코드 숫자로 변환합니다.
- toString(16) — 각 숫자를 16진수 문자열로 변환합니다.
- join('') — 모든 16진수 문자열을 하나의 문자열로 연결합니다.
- filter() — '1'부터 '9' 사이의 숫자 문자만 남기고 알파벳(a~f)과 0은 제거합니다.
- reduce() — 필터링된 각 자릿수를 모두 더해 최종 합계를 계산합니다.
출력 결과
위 코드를 실행하면 콘솔에 다음과 같이 출력됩니다.
91
즉, "Hello, World!" 문자열의 각 문자를 16진수로 변환한 전체 문자열에서 숫자 부분만 모두 더하면 91이라는 결과가 나옵니다.