Today I Learned (TIL)

숫자 문자열과 영단어 자바스크립트 23.12.23

폼폼코 2023. 12. 23. 12:49
728x90
반응형

알고리즘 문제 풀다가 너무 어이없게 풀어서 기록

2021 카카오 채용연계형 인턴십

https://programmers.co.kr/learn/courses/30/lessons/81301

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


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

 

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

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

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

 

내가 푼 방법

function solution(s) {
    
    
    //해당 숫자표에 맞다면 전부 숫자로 바꿔야함 
    let  answer = s.replace(/zero/g, 0);
    let  answer1 = answer.replace(/one/g, 1);
    let  answer2 = answer1.replace(/two/g, 2);
    let  answer3 = answer2.replace(/three/g, 3);
    let  answer4 = answer3.replace(/four/g, 4);
    let  answer5 = answer4.replace(/five/g, 5);
    let  answer6 = answer5.replace(/six/g, 6);
    let  answer7 = answer6.replace(/seven/g, 7);
    let  answer8 = answer7.replace(/eight/g, 8);
    let  answer9 = answer8.replace(/nine/g, 9);
    return parseInt(answer9)
}
 

(여기 사이트를 참고해서 풀어봤는데 정규식 치환은 내용이 방대해서 따로 정리해봐야겠다)

그리고 마지막은 숫자로 반환해줘야하기에 parseint 사용하였다

 

다른 사람 풀이

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]);
        answer = arr.join(i);
    }

    return Number(answer);
}
 

for문을 이용한 깔끔한 풀이

단어로 split했던 array를 join으로 다시 묶으면서 그 사이에 i(해당 숫자)를 넣어주는거에요 라고 댓글에 설명이있는데

처음에는 무슨소리인지 모르다가

다시 해석해보니 numbes 에서 해당 단어가 있다면 스플릿으로 빼버리고 해당자리에 인덱스 값을 넣어줘버리는 알고리즘

그리고 마지막 숫자로 변환까지 깔끔한 풀이였네요 알고리즘은 풀때마다 신기한 방법들이 많은거같습니다

 

 

728x90
반응형