@@ -6,7 +6,8 @@ class StringCalculator {
66 return 0 ;
77 }
88
9- let delimiter = / [ , \: ] / ;
9+ const defaultDelimiters = [ "," , ":" ] ;
10+ let allDelimiters = [ ...defaultDelimiters ] ;
1011 let numbersString = text ;
1112
1213 if ( text . startsWith ( "//" ) ) {
@@ -16,22 +17,26 @@ class StringCalculator {
1617 }
1718
1819 const customDelimiter = match [ 1 ] ;
19- if ( customDelimiter . length !== 1 ) {
20- throw new Error ( "[ERROR] 커스텀 구분자는 한 글자여야 합니다 ." ) ;
20+ if ( ! customDelimiter ) {
21+ throw new Error ( "[ERROR] 커스텀 구분자가 비어있습니다 ." ) ;
2122 }
22- delimiter = new RegExp (
23- customDelimiter . replace ( / [ . * + ? ^ $ { } ( ) | [ \] \\ ] / g, "\\$&" )
24- ) ;
23+
24+ allDelimiters . push ( customDelimiter ) ; // 기본 구분자에 커스텀 구분자 추가
2525 numbersString = match [ 2 ] ;
2626 }
2727
28- if ( numbersString . split ( delimiter ) . some ( ( token ) => token === "" ) ) {
29- throw new Error (
30- "[ERROR] 잘못된 입력 형식입니다. (숫자가 없거나 연속된 구분자)"
31- ) ;
28+ const escapedDelimiters = allDelimiters . map (
29+ ( d ) => d . replace ( / [ . * + ? ^ $ { } ( ) | [ \] \\ ] / g, "\\$&" ) // 정규식 특수문자 이스케이프
30+ ) ;
31+ const delimiterRegex = new RegExp ( escapedDelimiters . join ( "|" ) ) ;
32+
33+ const numberTokens = numbersString . split ( delimiterRegex ) ;
34+
35+ if ( numberTokens . some ( ( token ) => token === "" ) ) {
36+ throw new Error ( "[ERROR] 잘못된 입력 형식입니다. (연속된 구분자)" ) ;
3237 }
3338
34- const numbers = numbersString . split ( delimiter ) . map ( Number ) ;
39+ const numbers = numberTokens . map ( Number ) ;
3540
3641 const sum = numbers . reduce ( ( currentSum , num ) => {
3742 if ( isNaN ( num ) ) {
0 commit comments