카테고리 없음

[알고리즘] 숫자 문자열과 영단어 javascript

ShinBW 2022. 1. 19. 13:58

문제설명

숫자 및 영단어 참조

제한사항 / 입출력 예

입출력 예 설명

제한시간 안내

  • 정확성 테스트 : 10초

이전 문제들에도 있었는지 모르겠지만 이 문제는 제한시간이 걸려있다..

문제를 읽으면서 풀이과정을 상상했을때

숫자와 영단어 배열을 만들어주고

각 배열을 for문을 사용해서 돌린다음 if문으로 비교해서 맞는 값끼리 replace(찾는문자열, 바꿀문자열)을 통해 변경할 예정이었다.

내가 상상한 문제풀이 그림

문제풀이

// let word = {
//   '0'    : 'zero',
//   '1'    : 'one',
//   '2'    : 'two',
//   '3'    : 'three',
//   '4'    : 'four',
//   '5'    : 'five',
//   '6'    : 'six',
//   '7'    : 'seven',
//   '8'    : 'eight',
//   '9'    : 'nine'
// }



function solution(s) {
  var answer = 0;
  let word = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']

  let num = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
  let ss = s.split('')
  // console.log(ss)
  for (let i = 0; i < 10; i++) {
    // console.log(word[i])
    // console.log(num[i])
    if(sessionStorage === word[i]){
      answer = s.replace(word[i], num[i])
    }
  }
  return Number(answer)
}

solution("one4seveneight")

이런식으로 코드를 짜면서 콘솔을 찍어보니 s는 모든문자들이 붙어있어 스플릿을 해줘야겠다 생각하고 스플릿하고 결과를 봤는데

//입력 받은 s를 split('')으로 함
[
  'o', 'n', 'e', '4',
  's', 'e', 'v', 'e',
  'n', 'e', 'i', 'g',
  'h', 't'
]

이런식으로 한글자씩 따로 나와 이방법은 틀렸구나 직감을 했다
한다면 더 할 수 있겠지만..?
one 묶고,,, seven 묶고,,,,
너무 비효율적인 방법이다.. 이쯤 헬프를 외치며 고수님들의 풀이를 보기시작한다.

내가 생각한 for문 사용과 s의 스플릿 사용

어떻게 써야하나 몰랐는데 이분의 코드를 보며 이해할수있었다.

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

    for(let i=0; i< numbers.length; i++) {
        let arr = answer.split(numbers[i]);
        // console.log(arr) // 윗윗줄에 answer =s 해서 anwer 값은 입력값   // 입력밧을 돌면서 넘버스(영단어)가 있으면 스플릿해주라
        // console.log(i)  //0~9
        answer = arr.join(i); // 
        // console.log(answer)
    }

    return Number(answer); // 출력값은 숫자니까 Nuber()사용
}
solution('onetwo3seven5six')

알고리즘 문제푼지 이제 5일차인데 지금 내수준을 영어로 비유하자면
말귀는 알아듣는데 내가 말을 못하는 수준인거 같다.
실제론 듣지도 못하지만
코드는 읽고 이해는 가능하나 내손으로 사용하는 수준이 되지 못한것을 매번느낀다..

더 쉬운 고수의 문제풀이

// 정규 표현식을 사용해서 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);
}