

const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split('');
const arr = {
ABC: 3,
DEF: 4,
GHI: 5,
JKL: 6,
MNO: 7,
PQRS: 8,
TUV: 9,
WXYZ: 10,
}
let time = 0;
for (let i = 0; i < input.length; i++) {
for (let j = 3; j <= 10; j++) {
if (arr[j].includes(input[i])) {
time += j;
}
}
}
console.log(time);
다이얼 문제를 풀이하던 중, 아래 코드에서 런타임 에러(Runtime Error)가 발생했다.
문법적으로는 문제가 없어 보였지만, 프로그램 실행 중 다음과 같은 에러 메시지와 함께 종료되었다.
TypeError: Cannot read properties of undefined (reading 'includes')
이 에러는 undefined.includes()가 호출되었을 때 발생한다. undefined 타입에는 includes 메서드가 존재하지 않기 때문에 실행 중 TypeError가 발생하게 된다.
객체의 key는 문자열인데 숫자로 접근하면서 undefined가 되었고, 그 undefined에 includes() 메서드를 호출해 런타임 에러가 발생했다.
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split('');
const arr = {
ABC: 3,
DEF: 4,
GHI: 5,
JKL: 6,
MNO: 7,
PQRS: 8,
TUV: 9,
WXYZ: 10,
}
let time = 0;
for(let i=0; i < input.length; i++){
for(let j in arr){
if(j.includes(input[i])){ << j → "ABC", "DEF" 같은 문자열 -> 정상 동작
time += arr[j]
}
}
}
console.log(time);
이 문제의 런타임 에러는 로직의 문제가 아니라, 객체의 구조를 잘못 이해한 상태에서 잘못된 방식으로 접근한 것이 원인이었다.
실행 전에 잡히지 않는 오류이기 때문에, 자료형과 객체 구조를 명확히 파악하는 것이 중요하다.