코린이의 소소한 공부노트

[프로그래머스/Lv.1] 숫자 문자열과 영단어 본문

코딩테스트 풀이/JAVA

[프로그래머스/Lv.1] 숫자 문자열과 영단어

무지맘 2022. 11. 14. 00:13

1. Input

1) 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s

 

2. Output

1) s가 의미하는 원래 숫자

 

3. Constraint

1) 1 s의 길이 50
2) s"zero" 또는 "0"으로 시작하는 경우는 주어지지 않는다.

3) 반환 값이 int 범위에 맞는 정수가 되는 올바른 입력만 s로 주어진다.

4) 각 숫자에 대응하는 영단어는 다음같이 나온다.

0 zero   1 one   2 two   3 three   4 four   5 five   6 six   7 seven   8 eight   9 nine

 

4. Example

Input: s="one4seveneight" -> Output: 1478

 

5. Code

1) 첫 코드(2022/??)

String rest = s;
String answer = "";
char test = rest.charAt(0);
while(rest.length()>0) {
    test = rest.charAt(0);
    switch(test) {
        case 'z':
            answer += "0";
            rest = rest.substring(4);
            break;
        case 'o':
            answer += "1";
            rest = rest.substring(3);
            break;
        case 't': // two, three
            if(rest.charAt(1) == 'w') {
                answer += "2"; rest = rest.substring(3);
            }
            else {
                answer += "3"; rest = rest.substring(5);
            }
            break;
        case 'f': // four, five
            if(rest.charAt(1) == 'o') answer += "4";
            else answer += "5";
            rest = rest.substring(4);
            break;    
        case 's': // six, seven
            if(rest.charAt(1) == 'i') {
                answer += "6"; rest = rest.substring(3);
            }
            else {
                answer += "7"; rest = rest.substring(5);
            }
            break;
        case 'e':
            answer += "8";
            rest = rest.substring(5);
            break;
        case 'n':
            answer += "9";
            rest = rest.substring(4);
            break;
        case '0': case '1': case '2': case '3': case '4':
        case '5': case '6': case '7': case '8': case '9':
            answer += test;
            rest = rest.substring(1);
            break;
    } // switch
} // while
return Integer.parseInt(answer);

2) 훨씬 간단해지고 빨라진 코드(2022/11/14)

String num = "";
for(int i=0 ; i<s.length() ; i++){
char c = s.charAt(i);
switch(c){
    case 'z': // zero
        num += String.valueOf(0); i+=3; break;
    case 'o': // one
        num += String.valueOf(1); i+=2; break;
    case 't': // two, three
        if(String.valueOf(s.charAt(i+1)).equals("w"))
            { num += String.valueOf(2); i+=2;}
        else
            { num += String.valueOf(3); i+=4;}
        break;
    case 'f': // four, five
        if(String.valueOf(s.charAt(i+1)).equals("o"))
            num += String.valueOf(4);
        else
            num += String.valueOf(5);
        i+=3; break;
    case 's': // six, seven
        if(String.valueOf(s.charAt(i+1)).equals("i"))
            { num += String.valueOf(6); i+=2;}
        else
            { num += String.valueOf(7); i+=4;}
        break;
    case 'e': // eight
        num += String.valueOf(8); i+=4; break;
    case 'n': // nine
        num += String.valueOf(9); i+=3; break;
    default: // digit
        num += String.valueOf(c);
    } // switch
} // for
return Integer.valueOf(num);