본문 바로가기
Algorithm/Programmers

[프로그래머스|숫자 문자열과 영단어] replaceAll 함수

by 수짱수짱 2022. 8. 29.

문제


나의 해설

import java.util.*;

class Solution {
    public int solution(String s) {
        int answer = 0;
        
        String[] words = {"zero","one","two","three","four","five","six","seven","eight","nine"};
        int[] integers = {0,1,2,3,4,5,6,7,8,9};
        
        StringBuffer sb = new StringBuffer();
        ArrayList<Integer> temp = new ArrayList<>(); // answer로 바꿀 list
        String[] s_array = s.split("");
        
        for(String string : s_array){

            try{
                int k = Integer.parseInt(string);
                temp.add(k); // 숫자라면 temp에 추가
                continue;
                
            }
            catch(NumberFormatException e){
                // 숫자가 아니라면 그냥 넘어감
            }
            
            sb.append(string);
            
            if(Arrays.asList(words).contains(sb.toString())){
                temp.add(Arrays.asList(words).indexOf(sb.toString()));
                sb.setLength(0);   // StringBuffer 초기화
            }  
            
        } 
        
        
        for(int i=0; i<temp.size(); i++){
            answer *= 10;
            answer += temp.get(i);
        }
        
        return answer;
    }
}

stringbuffer를 통해 숫자가 아닌 문자열들을 합해가며 반복한다.

합해진 문자열이 words에 포함되는 문자라면 words에 해당하는 문자의 인덱스 번호를 temp에 저장후 sb를 초기화한다.

인덱스 번호 = 해당 문자의 숫자

 

 

이후 temp의 길이가 자릿수가 되므로 자릿수만큼 temp에서 구해온 숫자를 더해준다.

answer의 초기값이 0이므로 answer에 그대로 곱하고 더해준다.

(참고: https://zetawiki.com/wiki/%EC%9E%90%EB%B0%94_%EC%9E%90%EB%A6%BF%EC%88%98_int_%EB%B0%B0%EC%97%B4%EC%9D%84_int%EB%A1%9C_%EB%B3%80%ED%99%98)


모범 답안

=> replaceAll 메소드 사용

import java.util.*;

class Solution {
    public int solution(String s) {
        int answer = 0;
        String[] words = {"zero","one","two","three","four","five","six","seven","eight","nine"};

        for(int i=0; i<10; i++){
           s = s.replaceAll(words[i],Integer.toString(i);
        }

        return Integer.parseInt(s);  // 문자열을 정수형으로 변환
    }
}

 

String replaceAll(String 변환 대상 문자열, String 변환할 문자 값)

입력 인자의 형이 String이므로 정규표현식사용 할 수 있다.

=> replace 함수와의 차이점. replace는 두번 인자가 char. 정규표현식 사용 불가

 

ex)

String s = "abcaad"
s.replaceAll("a", "good");
결과 >> goodbcgoodgoodd

(참고:https://jamesdreaming.tistory.com/85, https://mine-it-record.tistory.com/127)