반응형

문제 링크

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

 

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

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

programmers.co.kr

 

나의 풀이 설계
        내가 생각한 솔루션
        1. 받은 문자열의 맨 앞이 숫자라면, 해당 숫자를 temp에 저장한다. (switch 문 사용)
        1.1. 받은 문자열의 맨 앞이 문자라면, 해당 문자에 맞는 숫자를 찾아 temp에 저장한다.
        2. 숫자 또는 문자가 가리키는만큼 기존 s에서 지워준다.
        3. 문자열이 끝날 때까지 answer = answer*10 + temp를 연산한다. (while 사용)

 

나의 풀이

class Solution {
    public int solution(String s) {
        int answer = 0;
        /*
        내가 생각한 솔루션
        1. 받은 문자열의 맨 앞이 숫자라면, 해당 숫자를 temp에 저장한다. (switch 문 사용)
        1.1. 받은 문자열의 맨 앞이 문자라면, 해당 문자에 맞는 숫자를 찾아 temp에 저장한다.
        2. 숫자 또는 문자가 가리키는만큼 기존 s에서 지워준다.
        3. 문자열이 끝날 때까지 answer = answer*10 + temp를 연산한다. (while 사용)
        */

        // 1. 받은 문자열의 맨 앞이 숫자라면, 해당 숫자를 temp에 저장한다. (switch 문 사용)
        while(s.length() > 0){
        switch(s.charAt(0)){
            case '0':
                answer = answer * 10 + 0;
                s = s.substring(1);
                break;
            case '1':
                answer = answer * 10 + 1;
                s = s.substring(1);
                break;
            case '2':
                answer = answer * 10 + 2;
                s = s.substring(1);
                break;
            case '3':
                answer = answer * 10 + 3;
                s = s.substring(1);
                break;
            case '4':
                answer = answer * 10 + 4;
                s = s.substring(1);
                break;
            case '5':
                answer = answer * 10 + 5;
                s = s.substring(1);
                break;
            case '6':
                answer = answer * 10 + 6;
                s = s.substring(1);
                break;
            case '7':
                answer = answer * 10 + 7;
                s = s.substring(1);
                break;
            case '8':
                answer = answer * 10 + 8;
                s = s.substring(1);
                break;
            case '9':
                answer = answer * 10 + 9;
                s = s.substring(1);
                break;
            case 'z':
                answer = answer * 10 + 0;
                s = s.substring(4);
                break;
            case 'o':
                answer = answer * 10 + 1;
                s = s.substring(3);
                break;
            case 't':
                //two, three
                if(s.charAt(1) == 'w'){
                    answer = answer * 10 + 2;
                    s = s.substring(3);
                }else{
                    answer = answer * 10 + 3;
                    s = s.substring(5);
                }
                break;
            case 'f':
                //four, five
                if(s.charAt(1) == 'o'){
                    answer = answer * 10 + 4;
                    s = s.substring(4);
                }else{
                    answer = answer * 10 + 5;
                    s = s.substring(4);
                }
                break;
            case 's':
                //six, seven
                if(s.charAt(1) == 'i'){
                    answer = answer * 10 + 6;
                    s = s.substring(3);
                }else{
                    answer = answer * 10 + 7;
                    s = s.substring(5);
                }
                break;
            case 'e':
                answer = answer * 10 + 8;
                s = s.substring(5);
                break;
            case 'n':
                answer = answer * 10 + 9;
                s = s.substring(4);
                break;
        }

        }
        /*
        1.1. 받은 문자열의 맨 앞이 문자라면, 해당 문자에 맞는 숫자를 찾아 temp에 저장한다.
        2. 숫자 또는 문자가 가리키는만큼 기존 s에서 지워준다.
        3. 문자열이 끝날 때까지 answer = answer*10 + temp를 연산한다. (while 사용)
        */


        return answer;
    }
}

 

반응형

+ Recent posts