숫자 문자열과 영단어

박서현·2023년 8월 18일
0
post-thumbnail

🐥 문제

programmers 숫자 문자열과 영단어

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

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

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

입출력 예

		s			result

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



🔸나의 풀이 ( 배열 사용 )

  • 객체로 푸는 방법이 더 좋은 방법일 것 같지만 나는 객체보다 배열이 더 익숙하기 때문에 배열로 먼저 풀어 보았다.

❌ 실패 코드

function solution(s) {
    const srt = ["zero", "one" , "two", "three", "four", "five", "six", "seven", "eight", "nine"]
    const num = [0, 1 , 2, 3, 4, 5, 6, 7, 8, 9]
    srt.forEach((element, i) => {
        s.includes(element)? s.replace(element, num[i]) : null;
    });
    return Number(s)
}

solution("one4seveneight")
  • replace( )는 문자열을 변경하는것이 아니라 새로운 문자열을 반환하는것이다.
    그렇기 때문에 앞에 선언부를 추가해야한다.
  • replace( ) 를 사용했기 때문에 삼항연산자가 필요하지않다
    s 문자열에 포함되는지를 묻는 코드가 필요하지 않다.
  • replace( )를 사용하여 식별자로 문자열을 찾을 경우 new RegExp(element, 'g') 이렇게 사용해야 한다.
    new RegExp( )는 정규표현식을 생성하는 구문이다.

⭕ 수정 코드

function solution(s) {
    const srt = ["zero", "one" , "two", "three", "four", "five", "six", "seven", "eight", "nine"]
    const num = [0, 1 , 2, 3, 4, 5, 6, 7, 8, 9]
    srt.forEach((element, i) => {
        s = s.replace(new RegExp(element, 'g'), num[i])
    });
    return Number(s)
}

solution("one4seveneight")



🔸나의 풀이 ( 객체 사용 )

function solution(s) {
    const srt = {
        "zero" : 0,
        "one" : 1,
        "two" : 2, 
        "three" : 3, 
        "four" : 4, 
        "five" : 5, 
        "six" : 6, 
        "seven" : 7, 
        "eight" : 8, 
        "nine" : 9
    }
    for (const key in srt) {
        if (s.includes(key)) {
            s = s.replace(new RegExp(key, 'g'), srt[key]);
        }
    }
    return s
}

solution("one4seveneight")

내 생각에 는 객체로 푸는게 더 간단할거라고 생각했는데 배열이 더 간단한 것 같다




🔹다른 사람의 풀이

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문의 i를 이용하는 방법이 있었다!!!!

0개의 댓글