본문 바로가기
알고리즘/프로그래머스 문제-JS

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

by sweesweet 2022. 5. 31.

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

 

코딩테스트 연습 - 숫자 문자열과 영단어

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

programmers.co.kr

첫번째 시도! 

오늘 푼 문제는 아니다

replaceAll 메서드를 사용하고 싶었지만, 프로그래머스에서는 사용이 불가능한 것 처럼 보였다

function solution(s) {
	if(Number.isInteger(Number(s))){ //s가 정수인지 
    	return Number(s)
    }
    let str = s
    const numEn= ['zero','one','two','three','four','five','six','seven','eight','nine','ten']

    while(true){
        if(Number.isInteger(Number(str))){ // 만약 str이 정수라면 값반환
        return Number(str)
    }
    for(let i=0; i<numEn.length; i++){
        str=str.replace(numEn[i],i)//for문을 돌면서 replace로 문자열 대체
    }

    }
}
더보기
테스트 1 통과 (0.07ms, 30.1MB)
테스트 2 통과 (0.08ms, 30MB)
테스트 3 통과 (0.06ms, 30MB)
테스트 4 통과 (0.06ms, 29.8MB)
테스트 5 통과 (0.10ms, 30.1MB)
테스트 6 통과 (0.08ms, 30.1MB)
테스트 7 통과 (0.14ms, 29.9MB)
테스트 8 통과 (0.07ms, 30.1MB)
테스트 9 통과 (0.06ms, 29.9MB)
테스트 10 통과 (0.05ms, 29.9MB)

두번째 시도

다른 풀이를 보니 split으로 푸는 걸 보았다. split 과 join만 캐치해 다시 생각해보았다

function solution(s) {
        if(Number.isInteger(Number(s))){
        return Number(s)
    }
    let str=s
    const numEn= ['zero','one','two','three','four','five','six','seven','eight','nine','ten']

    for(let i=0; i<numEn.length; i++){
        if(Number.isInteger(Number(str))){
             return Number(str)
        }
        str=str.split(numEn[i]).join(i)
    }
   
}
더보기
테스트 1 통과 (0.06ms, 30.1MB)
테스트 2 통과 (0.09ms, 29.9MB)
테스트 3 통과 (0.07ms, 30.1MB)
테스트 4 통과 (0.06ms, 29.8MB)
테스트 5 통과 (0.07ms, 30.1MB)
테스트 6 통과 (0.08ms, 30MB)
테스트 7 통과 (0.07ms, 29.9MB)
테스트 8 통과 (0.15ms, 30.1MB)
테스트 9 통과 (0.10ms, 30MB)
테스트 10 통과 (0.05ms, 29.9MB)

'알고리즘 > 프로그래머스 문제-JS' 카테고리의 다른 글

[JS]최대공약수와 최소공배수  (0) 2022.06.27
[JS]예산  (0) 2022.06.26
[JS]가운데 글자 가져오기  (0) 2022.05.31
[JS]같은 숫자는 싫어  (0) 2022.05.31
[JS]두 정수 사이의 합  (0) 2022.05.31