회사 면접 중 라이브 코딩테스트를 진행했는데 문제는 간단해보였다
정규식(reg express) [0-9_]를 통과하는 문자열에서 _
로 나누어 숫자값을 합치는 내용이었다
간단히 split 함수를 사용하여 배열로 만들고 reduce함수로 합치면 되겠다고 생각한 순간
면접관님이 split 사용 안하고요 라고 하셨고
아... 그래도 _
로 자르는거야 쉬운일이었다.
for문을 통해서 배열로 만들면 되는 일이었다 하지만 여기서 형변환을 위해 Number를 사용했는데 Number를 안쓰고 형변환을 해야한다고 한다. 여기서부터 멘탈붕괴가 왔다. 어떻게 형변환을 해야하지 순간 이것저것 방법을 떠올렸지만 형변환 함수를 안 쓰고는 잘모르겠다.
집에와서 찾아보니 String.prototype.charCodeAt()
라는 것이 있고 이를 활용하면 된다는 것을 알았다.
해당 string 값의 아스키 코드값을 반환하는 함수인데 어떻게 활용할 수 있냐면
// 문자가 숫자인지 확인하는 함수
function isDigit(char: string): boolean {
const charNum = char.charCodeAt(0);
return charNum >= '0'.charCodeAt(0) && charNum <= '9'.charCodeAt(0);
}
// 문자를 숫자로 변환하는 함수
function charToDigit(char: string): number {
return char.charCodeAt(0) - '0'.charCodeAt(0);
}
이런 식으로 활용할 수 있다.
문제를 풀어보면
function sumNumbersSeparatedByUnderscore(input: string): number {
let sum = 0;
let currentNumber = 0;
for (const char of input) {
if (char === "_") {
sum += currentNumber;
currentNumber = 0;
} else if (isDigit(char)) {
currentNumber = currentNumber * 10 + charToDigit(char);
}
}
return sum + currentNumber;
}
// 문자가 숫자인지 확인하는 함수
function isDigit(char: string): boolean {
const charNum = char.charCodeAt(0);
return charNum >= "0".charCodeAt(0) && charNum <= "9".charCodeAt(0);
}
// 문자를 숫자로 변환하는 함수
function charToDigit(char: string): number {
return char.charCodeAt(0) - "0".charCodeAt(0);
}
// 예제 사용:
const inputString = "12_34_56_78";
const result = sumNumbersSeparatedByUnderscore(inputString);
console.log(result); // 출력: 180
마지막에 면접관님에게 형변환에 대해서 물어봤는데 친절하게 알려주셨고 알고리즘 문제라기보다는... 이라고 말하신거보면 데이터를 다루는 방법에 대한 문제가 아니었나싶다. 기본기의 부족함을 느끼는 하루였다.