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

아래 예제와 같이 파싱해주기만 하면되는 간단한 문제입니다.

입력
"one4seveneight"

출력
1478

String으로 들어온걸 Integer로 리턴해야되는게 가장 중요한 포인트!!

내가 푼 방법

import java.util.*;

class Solution {
    public int solution(String s) {
        
        StringBuilder answer = new StringBuilder();
        HashSet<String> nums = new HashSet<String>();
        
        for(int i = 0; i < 10; i++)
            nums.add(String.valueOf(i));
        
        StringBuilder sb = new StringBuilder();
        for(int j = 0; j < s.length(); j++) {
            sb.append(s.charAt(j));
            if(sb.toString().length() == 1) {
                if(nums.contains(sb.toString())) {
                    answer.append(sb.toString());
                    sb.delete(0, 1);      
                }
            } else if (sb.toString().length() == 3) {
                if(sb.toString().equals("two")){
                    answer.append(2);
                    sb.delete(0, 3);
                } else if(sb.toString().equals("six")) {
                    answer.append(6);
                    sb.delete(0, 3);
                } else if(sb.toString().equals("one")) {
                    answer.append(1);
                    sb.delete(0, 3);
                }
            } else if (sb.toString().length() == 4) {
                if(sb.toString().equals("four")) {
                    answer.append(4);
                    sb.delete(0, 4);
                } else if(sb.toString().equals("nine")) {
                    answer.append(9);
                    sb.delete(0, 4);
                } else if(sb.toString().equals("zero")) {
                    answer.append(0);
                    sb.delete(0, 4);
                } else if(sb.toString().equals("five")) {
                    answer.append(5);
                    sb.delete(0, 4);
                }
            }  else if (sb.toString().length() == 5) {
                if(sb.toString().equals("three")){
                    answer.append(3);
                    sb.delete(0, 5);
                } else if(sb.toString().equals("eight")) {
                    answer.append(8);
                    sb.delete(0, 5);
                } else if(sb.toString().equals("seven")) {
                    answer.append(7);
                    sb.delete(0, 5);
                }
            }
        }
        return Integer.parseInt(answer.toString());
    }
}

무식하게 복사붙여넣기로 if문을 나열해서 풀었습니다.

HashSet에 0~9까지 숫자를 String으로 바꿔서 집어넣어놓고, StringBuilder에 하나씩넣고 비교하면서 또다른 StringBuilder에 답을 쌓고 parseInt해서 리턴했습니다.

바람직한 풀이법

import java.util.*;

class Solution {
    public int solution(String s) {
        int answer = 0;
        int len = s.length();
        String[] digits = {"0","1","2","3","4","5","6","7","8","9"};
        String[] alphabets = {"zero","one","two","three","four","five","six","seven","eight","nine"};

        for(int i=0; i<10; i++){
            s = s.replaceAll(alphabets[i],digits[i]);
        }

        return Integer.parseInt(s);
    }
}

배열에 맞추고 replaceAll함수로 한방에 끝냈네요. 최곱니다 ㄷㄷㄷ

좋은 웹페이지 즐겨찾기