<사전 생각>

기존 문자열이 변하는 과정이 빈번하게 일어나기 때문에 StringBuffer를 사용하는 것이 효과적이라는 사실을 생각해야 했고 제일 중요한 해당 문자열에서 알파벳으로 들어온 숫자를 탐색하는 방법은 String의 indexOf()를 활용 할 생각을 하고 문제를 풀었다. 

 

<중간 문제점>

1. 단순히 if문 10번(0~10)을 쓸 생각을 했었는데 동일한 작업이면 조금더 고민해서 한번의 코드로 바꾸는 게 좋을 것 같다.

2. 12four3four 같이 같은 문자가 여러번 들어올 수도 있는데 이를 간과하고 짜서 런타임 에러가 발생했다.  

 

<최종 코드>

class Solution {
    // 시간 복잡도 O(1) 공간 복잡도 O(1)
    private String engSearchChange(String s){
        StringBuffer sForm = new StringBuffer(s);
        String[] num = {"zero","one","two","three","four","five","six","seven","eight","nine"};

        for(int i=0;i<10;i++){
            while(sForm.indexOf(num[i])!=-1)
                sForm.replace(sForm.indexOf(num[i]),
                        sForm.indexOf(num[i])+num[i].length(), Integer.toString(i));
        }
        return sForm.toString();
    }
    public int solution(String s) {
        String tmp = engSearchChange(s);
        int answer = Integer.parseInt(tmp);
        return answer;
    }
    // 가장 극찬 받은 풀이의 코드
    public int solution2(String s) {
        String alp[] = {"zero","one","two","three","four","five","six","seven","eight","nine"};
        String digit[] = {"0","1","2","3","4","5","6","7","8","9"};

        for(int i=0;i<10;i++){
            s.replaceAll(alp[i],digit[i]);
        }
        return Integer.parseInt(s);
    }
}

<메모>

StringBuffer을 무조건 적으로 쓰기보다는 좀 더 효율적으로 사용할 수 있는 함수는 없는가? 더 고민해봐야 할 것 같다

String.replace(str, str);

 

<링크>

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

+ Recent posts