[JS] charCodeAt()

Tae_Tae·2025년 9월 1일

알고리즘 문제풀때 자주 사용했던? 것

📌 핵심 개념

charCodeAt()은 문자열에서 특정 위치의 문자를 UTF-16 코드 유닛(숫자 값)으로 변환하는 메서드

문자열.charCodeAt(인덱스)

사용 이유

  • 문자를 숫자로 변환하여 연산 가능
  • 알파벳 순서 계산
  • 대소문자 변환
  • 문자 종류 판별

🎯 기본 사용법

1. 기본 동작

"Hello".charCodeAt(0)  // 72  ('H'의 코드값)
"Hello".charCodeAt(1)  // 101 ('e'의 코드값)
"Hello".charCodeAt(4)  // 111 ('o'의 코드값)

2. 인덱스 생략 시 (기본값: 0)

"ABC".charCodeAt()   // 65 (인덱스 0이 기본값)
"ABC".charCodeAt(0)  // 65 (같은 결과)

3. 잘못된 범위 → NaN 반환

"Hi".charCodeAt(5)   // NaN (범위 초과)
"Hi".charCodeAt(-1)  // NaN (음수 인덱스)

📊 ASCII 코드표 (참고)

주요 ASCII 값

문자 종류범위예시
숫자48-57'0' = 48, '9' = 57
대문자65-90'A' = 65, 'Z' = 90
소문자97-122'a' = 97, 'z' = 122
공백32' ' = 32
// 빠른 참조
'0'.charCodeAt(0)  // 48
'A'.charCodeAt(0)  // 65
'a'.charCodeAt(0)  // 97
' '.charCodeAt(0)  // 32

🔧 활용 패턴

패턴 1: 알파벳 인덱스 구하기

// 소문자 알파벳을 0~25 인덱스로 변환
function getAlphabetIndex(char) {
    return char.charCodeAt(0) - 'a'.charCodeAt(0);
    // 또는 직접 계산
    return char.charCodeAt(0) - 97;
}

getAlphabetIndex('a')  // 0
getAlphabetIndex('z')  // 25

패턴 2: 문자 종류 판별

function checkCharType(char) {
    const code = char.charCodeAt(0);
    
    if (code >= 65 && code <= 90) return "대문자";
    if (code >= 97 && code <= 122) return "소문자";
    if (code >= 48 && code <= 57) return "숫자";
    return "특수문자";
}

checkCharType('A')  // "대문자"
checkCharType('5')  // "숫자"

패턴 3: 대소문자 변환

// 소문자 → 대문자 (ASCII값 -32)
function toUpperCase(char) {
    const code = char.charCodeAt(0);
    if (code >= 97 && code <= 122) {
        return String.fromCharCode(code - 32);
    }
    return char;
}

// 대문자 → 소문자 (ASCII값 +32)
function toLowerCase(char) {
    const code = char.charCodeAt(0);
    if (code >= 65 && code <= 90) {
        return String.fromCharCode(code + 32);
    }
    return char;
}

패턴 4: 알파벳 카운팅

// 알파벳 개수 세기
const str = "hello";
const count = new Array(26).fill(0);

for (const char of str) {
    count[char.charCodeAt(0) - 97]++;
}
// count[7] = 1 (h), count[4] = 1 (e), 
// count[11] = 2 (l), count[14] = 1 (o)

🔄 역변환: String.fromCharCode()

숫자 코드를 다시 문자로 변환:

String.fromCharCode(65)   // 'A'
String.fromCharCode(97)   // 'a'

// 여러 코드를 한번에
String.fromCharCode(72, 101, 108, 108, 111)  // 'Hello'

⚠️ 주의사항

1. UTF-16과 특수 문자

// 한글, 이모지는 유니코드 값
'가'.charCodeAt(0)     // 44032
'😀'.charCodeAt(0)     // 55357 (서로게이트 페어)
'😀'.length            // 2 (주의!)

2. 성능 최적화

// ❌ 비효율적
for (let i = 0; i < str.length; i++) {
    const index = str.charCodeAt(i) - 'a'.charCodeAt(0);
}

// ✅ 효율적 (상수 캐싱)
const CHAR_A = 97;  // 'a'.charCodeAt(0)
for (let i = 0; i < str.length; i++) {
    const index = str.charCodeAt(i) - CHAR_A;
}

0개의 댓글