본문 바로가기
Coding test/Programmers

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

by jepa 2023. 8. 14.
728x90
SMALL

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

 

프로그래머스

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

programmers.co.kr

간단하게 문자들을 미리 담아놓고 돌아가면서 replace를 해주면된다.

0, 1, 2, 3 을 따로 저장해주지 않은 이유는 index값이 해당 값이기 때문에 따로 저장하진 않았다. 

class Solution {
    public int solution(String s) {
        String[] arr = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
        for(int i = 0 ; i<arr.length ; i++){
            s = s.replace(arr[i],Integer.toString(i));
        }
        return Integer.parseInt(s);
    }
}

아래처럼도 풀어보았는데..

class Solution {
    public int solution(String s) {
        int answer = 0;
        StringBuilder sb = new StringBuilder();
        for(int i=0;i<s.length();i++){
            switch(s.charAt(i)){
                case 'z' :
                    sb.append(0);
                    i=i+3;
                    break;
                case 'o' :
                    sb.append(1);
                    i=i+2;
                    break;
                case 't' :
                    if(s.charAt(i+1)=='w'){
                        sb.append(2);
                        i=i+2;
                    }else{
                        sb.append(3);
                        i=i+4;
                    }
                    break;
                case 'f' :
                    if(s.charAt(i+1)=='o'){
                        sb.append(4);
                    }else{
                        sb.append(5);
                    }
                    i=i+3;
                    break;
                case 's' :
                    if(s.charAt(i+1)=='i'){
                        sb.append(6);
                        i=i+2;
                    }else{
                        sb.append(7);
                        i=i+4;
                    }
                    break;
                case 'e' :
                    sb.append(8);
                    i=i+4;
                    break;
                case 'n' :
                    sb.append(9);
                    i=i+3;
                    break;
                default :
                    sb.append(s.charAt(i));
                    break;
            }
        }System.out.println(sb);
        answer = Integer.parseInt(sb.toString());
        return answer;
    }
}

// z , o, t2, f2, s2, e, n

속도 차이가 꽤 난다. StringBuffer를 이용해서 계속 append를 해줘서 그런걸까?

728x90
LIST