[Level1] 숫자 문자열과 영단어

JMinkyoung·2021년 10월 29일
1

Programmers

목록 보기
31/32
post-thumbnail

문제

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

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

제한

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

입출력 예

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

문제 풀이

zero부터 nine까지 배열에 넣게 되면 각각의 index배열 값이 일치한다.
s를 한글자씩 살피면서 숫자인 경우문자열인 경우로 나눠서 처리해주었다.

temp라는 변수에는 문자열인 경우 해당 문자열을 temp에 추가해 숫자를 만나는 경우에 temp를 숫자로 바꿔서 정답 배열에 넣고 temp는 다시 초기화 하는 방식으로 구현하였다.

이때 주의할 점이 두가지 생기는데

첫번째는 만약 처음부터 숫자가 들어오게 되면 temp엔 아무것도 없는데 숫자로 바꾸려 시도하기 때문에 temp가 비어있는지 채워져 있는지 확인하는 if문을 추가하였다.

두번째s의 마지막이 문자열로 되어있다면 temp에 남겨진 채로 for문이 종료되므로 마지막에

if(temp !== "") answer.push(arr.indexOf(temp));

이 코드를 추가하여 temp에 남겨진 값을 숫자로 변환하여 정답 배열에 넣어주었다.

정답 코드

function solution(s) {
    var answer = [];
    let arr = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
    let temp = "";
    
    for(let i=0; i<s.length; i++){
      if(!isNaN(s[i])){ // 숫자일 때
          if(temp === ""){
              answer.push(s[i]);
          }else{
              answer.push(arr.indexOf(temp));
              answer.push(s[i]);
              temp = "";
          }
      }else if(isNaN(s[i]) && arr.indexOf(temp) !== -1){
          answer.push(arr.indexOf(temp));
          temp = s[i];
      }else{
          temp += s[i];
      }
    }
    
    if(temp !== "") answer.push(arr.indexOf(temp));
    
    return answer.join("")*1;
}
profile
Frontend Developer

0개의 댓글