문제설명

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

다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.

  • 1478 → "one4seveneight"
  • 234567 → "23four5six7"
  • 10203 → "1zerotwozero3"

이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.

참고로 각 숫자에 대응되는 영단어는 다음 표와 같습니다.



제한사항

  • 1 ≤ s의 길이 ≤ 50
  • s가 "zero" 또는 "0"으로 시작하는 경우는 주어지지 않습니다.
  • return 값이 1 이상 2,000,000,000 이하의 정수가 되는 올바른 입력만 s로 주어집니다.



입출력 예


입출력 예 설명

입출력 예 #1

  • 문제 예시와 같습니다.

입출력 예 #2

  • 문제 예시와 같습니다.

입출력 예 #3

  • "three"는 3, "six"는 6, "seven"은 7에 대응되기 때문에 정답은 입출력 예 #2와 같은 234567이 됩니다.
  • 입출력 예 #2와 #3과 같이 같은 정답을 가리키는 문자열이 여러 가지가 나올 수 있습니다.

입출력 예 #4

  • s에는 영단어로 바뀐 부분이 없습니다.



제한시간 안내

  • 정확성 테스트 : 10초



풀이

<핵심키워드>
split
join
Number
for in

  • 오늘을 아주 쉽게 풀었다. 사실 어제 정규식을 사용하여 푼 문제가 있어서 오늘도 정규식으로 풀려고 했으나(replace를 사용해서...) 그렇게 하지 않아도 풀 수 있는 문제인 것 같아 자바스크립트 내장함수를 최대한 활용해서 문제를 풀었다.

  • 먼저 각각의 문자를 숫자로 변환하기 위해서는 문자 단위로 나눠야하기 때문에 배열에 0-9까지의 숫자들을 문자로 각각 담았다.

  • 그러면서 for문을 돌리면서 주어진 문자의 나열 s를 split을 사용해 문자단위로 쪼갰다. (while문을 사용할까 했지만 for문이 편리했다.)

    • 처음엔 for문을 사용했고 이후 더 줄일 수 있을 것 같아 for...in을 사용했다.
  • 중요!! 여기서 split와 join 함수의 특성을 교묘하게 이용했다.

    • split는 split()안에 들어가는 기준값을 삭제하고 그것을 중심으로 나머지 것들을 각각의 문자열로 반환해준다.

    • join은 각각의 문자열로 된 조합을 하나의 문자열로 만들어준다.

      • 즉, 여기서의 split는 n배열의 요소 문자열들이 들어있으면 삭제하고 join으로 각 배열의 순서 i를 join 해 버린다.

      • 그래도 이해가 되지 않는가? --> 자, 배열은 index 순서는 0부터 시작한다.(ex. n[0], n[1], n[2], n[3], ... n[9]) index에 대응되는 숫자가 문자로 주어진 것이 n 배열이다.

      • for문 안을 모두 마치고 s자체를 리턴하면 s = 1zerotwozero3 였던 값이 s = '10203' 이 된다.(아직 문자열임)

  • 마지막으로 숫자로 변환하기 위해 Number를 사용하여 문자열을 숫자로 변환해준다.

solution.js

function solution(s) {
    let n = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];

    for(let i in n) {
        s = (s.split(n[i])).join(i);
    }

    return Number(s);
}

배운 점 & 느낀 점

  • 많은 사람들이 replace로 처리해서 풀었다. (하지만 난 js 내장 함수로 풀었지롱)
  • 함수의 자주쓰이는 표면적인 기능을 알아두는 것도 좋지만 각각 함수의 특성을 잘 파악하여 잘 써먹는 것도 중요한 것 같다.
  • 짧게 쓰는 코드도 좋지만 남들에게 쉽게 설명할 수 있게 코드를 짜면 잘 짜여진 코드가 된 것 같다.
profile
Junior-Developer Code-Ludens hanling38

0개의 댓글