프로그래머스 숫자 문자열과 영단어 [Java]

문제출처

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

 

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

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

programmers.co.kr

 

import java.util.*;
class Solution {
    public int solution(String s) {
        int answer = 0;
        String tmp = "";
        for(int i = 0; i < s.length(); i++){
            if(!(97 <= s.charAt(i))){
                answer = answer * 10 + Integer.valueOf(s.charAt(i)) - 48;
                continue;
            }
            tmp += s.charAt(i);
            switch(tmp){
                case "zero":
                    answer = answer * 10;
                    tmp = "";
                    break;
                case "one":
                    answer = answer * 10 + 1;
                    tmp = "";
                    break;
                case "two":
                    answer = answer * 10 + 2;
                    tmp = "";
                    break;
                case "three":
                    answer = answer * 10 + 3;
                    tmp = "";
                    break;
                case "four":
                    answer = answer * 10 + 4;
                    tmp = "";
                    break;
                case "five":
                    answer = answer * 10 + 5;
                    tmp = "";
                    break;
                case "six":
                    answer = answer * 10 + 6;
                    tmp = "";
                    break;
                case "seven":
                    answer = answer * 10 + 7;
                    tmp = "";
                    break;
                case "eight":
                    answer = answer * 10 + 8;
                    tmp = "";
                    break;
                case "nine":
                    answer = answer * 10 + 9;
                    tmp = "";
                    break;
            }
        }
        return answer;
    }
}

문자열의 글자를 하나씩 확인해서 숫자면 바로  answer에 더해주고 아니면 문자열 하나를 만든 후에 더하는 방식으로 풀었다.

 

다른 사람 풀이를 보고나니 replaceAll이라는 신세계가.... 나는 valueOf를 쓰는 바람에 -49라는 알아보기도 애매한 연산이 추가되고 만약 문자열의 길이가 엄청 길어진다면 반복문을 많이 돌아야하는 비효율적인 방식이다.

 

다른 사람 풀이 보고 다시 풀어본 방식

import java.util.*;
class Solution {
    public int solution(String s) {
        int answer = 0;
        String[] number = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
        for(int i = 0; i < 10; i++){
            s = s.replaceAll(number[i], Integer.toString(i));
        }
        answer = Integer.parseInt(s);
        return answer;
    }
}

이렇게하면 코드도 훨씬 간결해지고 반복문도 10번밖에 돌지 않는다.

myoskin