티스토리 뷰

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

 

프로그래머스

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

programmers.co.kr

 


 

for문

function solution(s) {
    const numbers = {
        zero: "0",
        one: "1",
        two: "2",
        three: "3",
        four: "4",
        five: "5",
        six: "6",
        seven: "7",
        eight: "8",
        nine: "9"
    }

    let answer = ""
    let temp = ""

    for(let i = 0; i < s.length; i++) {
        if(isNaN(s[i])) {
            temp += s[i]
        } else {
            answer += s[i]
        }

        if(numbers[temp]) {
            answer += numbers[temp]
            temp = ""
        }
    }
    
    return Number(answer)
}
  1. 0부터 9까지의 영문자와 그에 해당하는 숫자를 객체로 만듦
  2. 빈 문자열을 담은 변수 answer과 temp 만듦
  3. 주어진 s를 한 글자씩 조회하도록 반복
    1. 현재 인덱스에 해당하는 값이 숫자가 아닌 문자일 경우(isNan) temp에 더함
    2. 숫자일 경우는 바로 answer에 더함
    3. temp가 처음에 만들었던 객체의 키 값일 경우(one, two와 같이 영단어가 완성됐을 경우)
      answer에 해당 키 값에 대한 숫자(value)를 더하고 temp를 다시 빈 문자열로 만듦
  4. 완성된 answer를Number 타입으로 바꾸어 return

 


다른 사람의 풀이

split(), join()

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

    for(let i = 0; i < numbers.length; i++) {
        let arr = s.split(numbers[i]); // 영단어를 구분자로 사용
        s = arr.join(i); // numbers 배열의 영단어가 인덱스 번호, i의 값과 동일하므로 가능
    }

    return Number(s);
}
  1. 영단어를 차례대로 담은 numbers 배열에 담음
    (이 때 영단어는 인덱스를 문자로 바꾼 것과 동일 : 0번째 인덱스 => zero)
  2. numbers 배열의 길이만큼 반복
    1. split() 사용해 영단어를 구분자로 사용
    2. 구분자로 사용한 영단어 자리에 해당 숫자(i)를 join
  3. 완성된 s를 Number 타입으로 바꾸어 return

 

replace(), 정규 표현식

function solution(s) {
    s = 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)
    
    return Number(s);
}

 


  • 메서드를 잘 활용하면 코드가 간결해지는 것 같다
  • 성능 면에서도 그게 좋을지는 잘 모르겠다
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함