알고리즘, 코딩테스트/알고리즘 풀이

[프로그래머스/ 2021 카카오 채용연계형 인턴십] 숫자 문자열과 영단어

jiyoon0000 2025. 2. 28. 16:32

Q. 숫자 문자열과 영단어

A1.

class Solution {
    public int solution(String s) {
        //각 숫자에 대응하는 영단어를 배열에 저장
        String[] words = {"zero", "one", "two", "three", "four", 
                         "five", "six", "seven", "eight", "nine"};
        
        //StringBuilder(가변 객체)를 활용해 문자열 저장
        //answer : 최종 문자열, numCard : 숫자가 아닌 영단어일때 단어 모으는 문자열
        StringBuilder answer = new StringBuilder();
        StringBuilder numCard = new StringBuilder();
        
        //문자열 s의 글자를 확인 후 문자를 변수 c에 저장
        for(int i = 0; i < s.length(); i++){
            char c = s.charAt(i);
            
            //c가 숫자인지 확인
            //숫자인 경우 answer에 바로 저장
            if(Character.isDigit(c)){
                answer.append(c);
            } else{
            //영어인 경우 numCard에 저장
                numCard.append(c);
                
                //numCard에 누적된 문자열을 words 배열 안에 있는 영단어와 비교 후 같은 경우
                //answer에 추가 후, numCard에 저장된 문자를 비워줌(setLength(0))
                for(int j = 0; j < words.length; j++){
                    if(numCard.toString().equals(words[j])){
                        answer.append(j);
                        numCard.setLength(0);
                        break;
                    }
                }
            }
        }
        //문자열을 정수로 변환한 후 반환
        return Integer.parseInt(answer.toString());
    }
}

 

A2.

class Solution {
    public int solution(String s) {
        String[] words = {"zero", "one", "two", "three", "four", 
                         "five", "six", "seven", "eight", "nine"};
                           
        //문자열 s 내의 해당 영단어를 그에 해당하는 숫자 문자열로 교체
        //words[i]에 해당하는 영단어를 i로 변환
        //replaceAll() 메서드를 사용해 s내에 있는 모든 해당 영단어를 찾아서 교체
        for(int i = 0; i < words.length; i++) {
            s = s.replaceAll(words[i], Integer.toString(i));
        }
        
        //모든 영단어를 숫자로 바꾼 후 최종 문자열 s를 정수로 변환하여 반환
        return Integer.parseInt(s);
    }
}