[프로그래머스] 코딩테스트연습 > 숫자 문자열과 영단어
알고리즘/javascript

[프로그래머스] 코딩테스트연습 > 숫자 문자열과 영단어

 

코딩테스트 연습 - 숫자 문자열과 영단어

네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자

programmers.co.kr

 

function solution(s) {
    let numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
    let answer = s 
    for(let i = 0; i < numbers.length; i++) {
        // i번째 숫자를 경계로 앞뒤로 나눠서 i번째 숫자에 해당하는 문제 없애기
        let arr = answer.split(numbers[i]);
        // join(i)를 이용해 1번째 숫자를 기준으로 ['','나머지'] => i나머지 로 붙이기
        answer = arr.join(i)
    }

    // answer = "1478" 처럼 string 형태이므로 int로 파싱
    return parseInt(answer)
}

 

이 외에도 정규표현식으로 일일이 바꾸는 방식도 가능하다.

function solution(s) {
  const number = s
    .replace(/zero/gi, '0')
    .replace(/one/gi, '1')
    .replace(/two/gi, '2')
    .replace(/three/gi, '3')
    .replace(/four/gi, '4')
    .replace(/five/gi, '5')
    .replace(/six/gi, '6')
    .replace(/seven/gi, '7')
    .replace(/eight/gi, '8')
    .replace(/nine/gi, '9');

  return Number(number);
}

다른 사람의 풀이를 보던 도중 parseInt 로 푼 경우와 Number로 푼 경우가 있는데 두 경우는 아래와 같은 차이점이 있다.

  • parseInt : 문자열 중에서 숫자로 된 부분만 뽑아서 return
    • 소수점이 있을 경우 정수 부분만 return  ex. parseInt(10.1234) → 10
  • Number : 문자열 전체가 숫자일 경우에 해당 문자열을 number로 return
    • 소수점이 있는 경우 소수점까지 return ex. Number(10.1234) → 10.1234

평소에 숫자 변환은 대부분 정수 변환이므로 parseInt 를 사용했는데 상황에 맞게 사용해야겠다.

 


Array.join( [seperator] ) : ["a", "b", "c"] 와 같이 comma 로 나눠져 있는 array 안의 문자열들을 seperator를 기준으로 합친다.

합친 결과는 string 이다. ( 위 코드에서도 i 라는 숫자를 seperator로 썼지만 결과는 string으로 return)

반응형