[백준 5622] 다이얼

ParkCode·2025년 12월 15일

알고리즘 공부

목록 보기
10/11

문제


나의 풀이

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() 메서드를 호출해 런타임 에러가 발생했다.

solution

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);

💡 배운점

이 문제의 런타임 에러는 로직의 문제가 아니라, 객체의 구조를 잘못 이해한 상태에서 잘못된 방식으로 접근한 것이 원인이었다.
실행 전에 잡히지 않는 오류이기 때문에, 자료형과 객체 구조를 명확히 파악하는 것이 중요하다.

profile
프론트엔드 개발자

0개의 댓글