[프로그래머스 level1] 숫자 문자열과 영단어(2021 카카오 인턴십)

김예지·2021년 10월 8일
1

문제

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


문제 풀이

내 풀이

정규표현식 사용해서 풀었다. 아주 직관적으로 푼 풀이👩🏻‍💻

function solution(s) {
    let answer = s
        .replace(/zero/g, 0)
        .replace(/one/g, 1)
        .replace(/two/g, 2)
        .replace(/three/g, 3)
        .replace(/four/g, 4)
        .replace(/five/g, 5)
        .replace(/six/g, 6)
        .replace(/seven/g, 7)
        .replace(/eight/g, 8)
        .replace(/nine/g, 9);

    answer=Number(answer);
    return answer;
}

다른 사람 풀이

배열을 통해서 풀 수 있다.

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);
}

이 코드는 split, join의 원리를 파악하면 쉽다. split, join이 무엇을 기준으로 쪼개지고 합해지는지를 잘 생각하자! 이해안되면 console창에 쳐보기!

let answer="one3four8";
let arr = answer.split("one"); //["", "3four8"]
console.log(arr.join(1)); //13four8

10/25 추가 풀이

function solution(s) {
    const number=['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'];
    for(let i=0; i<number.length; i++){
        let regexAll=new RegExp(number[i], 'g');
        if(s.includes(number[i])) s=s.replace(regexAll, i);
    }
    return Number(s);
}

여기서 처음에는 s.replace(/number[i]/g, i)를 했는데 전혀 제대로 동작하지 않았다. replace에 변수를 넣기 위해서는 RegExp 객체를 사용해야한다! 여기를 참고하자.

profile
내가 짱이다 😎 매일 조금씩 성장하기🌱

1개의 댓글

comment-user-thumbnail
2021년 10월 25일

10/25

  • 만약 replace(one, 1)으로 풀면 one이 두개일때 최초의 one만 1로 바뀌기 때문에, 정규표현식 /one/g을 통해 모든 one을 찾아서 replace해줘야한다.
  • 위의 풀이 모두로 해볼것
답글 달기