[프로그래머스] 숫자 문자열과 영단어

한재창·2023년 3월 29일
0

[1차] 숫자 문자열과 영단어

문제 설명

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

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

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

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

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

숫자영단어
0zero
1one
2two
3three
4four
5five
6six
7seven
8eight
9nine

제한사항

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

출력 형식

원래의 비밀지도를 해독하여 '#', 공백으로 구성된 문자열 배열로 출력하라.

입출력 예

sresult
"one4seveneight"1478
"23four5six7"234567
"2three45sixseven"234567
"123"123

입출력 예 설명

  • 입출력 예 #1
    • 문제 예시와 같습니다.
  • 입출력 예 #2
    • 문제 예시와 같습니다.
  • 입출력 예 #3
    • "three"는 3, "six"는 6, "seven"은 7에 대응되기 때문에 정답은 입출력 예 #2와 같은 234567이 됩니다.
    • 입출력 예 #2와 #3과 같이 같은 정답을 가리키는 문자열이 여러 가지가 나올 수 있습니다.
  • 입출력 예 #4
    • s에는 영단어로 바뀐 부분이 없습니다.

제한시간 안내

  • 정확성 테스트 : 10초

나의 풀이

  1. "zero" ~ "nine" 까지의 배열을 만든다.
  2. for 문을 돌려 s.split(num[i]) 를 한다.
  3. split 메서드를 사용해서 나누어진 부분에(i) 를 해서 문자를 숫자로 채워준다.
  4. 숫자로 바뀐 수를 문자 타입에서 숫자로 바꾸어서 리턴해준다.
function solution(s) {
   const num = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
    
    for(let i = 0; i < num.length; i++){
  // 만약 split("one") 라면 [ '', 'twothreefourfivesixseveneightnine' ]
  // .join(i), i=1 라면, 나뉘어진 부분에 1이 들어가서 문자열로 합쳐진다. '1twothreefourfivesixseveneightnine' 
        s = s.split(num[i]).join(i)
    }
    
    return Number(s)
}

좋다고 생각한 풀이

  • 정규 표현식을 사용해서 해당 글자라면 숫자로 바꿔준다.
function solution(s) {
    s = 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 parseInt(s);
}
profile
취준 개발자

0개의 댓글