문제



힌트

  • String을 앞에서 부터 한글자씩 가져와서 숫자면 정답영역에 저장, 문자면  임시영역에 저장합니다.
  • 임시영역에 저장된 문자열이 "zero" || "one" || ... 와 같다면 해당하는 숫자로 변환하여 정답영역에 저장합니다.
  • 모든 과정이 끝나면 정답영역을 리턴합니다.

풀이

class Solution {
    private final String ZERO = "zero";
    private final String ONE = "one";
    private final String TWO = "two";
    private final String THREE = "three";
    private final String FOUR = "four";
    private final String FIVE = "five";
    private final String SIX = "six";
    private final String SEVEN = "seven";
    private final String EIGHT = "eight";
    private final String NINE = "nine";
    
    public int solution(String s) {
        String answerAsString = getAnswer(s); // 문자가 숫자로 변환된 String을 획득한다.
        return Integer.parseInt(answerAsString); // Integer.parseInt를 통해 문자->숫자 변환
    }

    String getAnswer(String str) {
        StringBuilder answerStrBuilder = new StringBuilder();
        StringBuilder tempStrBuilder = new StringBuilder();

        for(int i = 0; i < str.length(); i++) {
            char c = str.charAt(i); // 특정 번지에 있는 문자를 획득
            if(isNumber(c)) { // 문자가 숫자라면
                answerStrBuilder.append(c); // answer StringBuilder에 추가한다.
            } else { // 문자가 아니라면
                tempStrBuilder.append(c); // 임시 StringBuilder에 추가하고
                if(isNumber(tempStrBuilder.toString())) { // 임시 StringBuilder가 숫자가 되었는지 판단
                    int numFromStr = convertToNumFromString(tempStrBuilder.toString()); // StringBuilder의 내용을 숫자로 변환
                    answerStrBuilder.append(numFromStr);  // answer StringBuilder에 추가한다.
                    tempStrBuilder = new StringBuilder(); // 임시 StringBuilder 초기화
                }
            }
        }
        return answerStrBuilder.toString();
    }

    boolean isNumber(char c) { // 인수로 전달받은 char가 숫자인지 확인
        if(c >= '0' && c <= '9') return true; // ASCII코드 기준으로 '0'은 48 '9'는 57임 그 사이에 존재하면 숫자
        return false;
    }

    boolean isNumber(String s) { // 인수로 전달받은 String이 숫자인지 확인
        if(s.equals(ZERO) || s.equals(ONE) || s.equals(TWO) || s.equals(THREE)
                || s.equals(FOUR) || s.equals(FIVE)|| s.equals(SIX)
                || s.equals(SEVEN) || s.equals(EIGHT) || s.equals(NINE)) return true;
        else return false;
    }

    int convertToNumFromString(String s) { // 인수로 전달받은 문자를 숫자로 변환한다.
        if(s.equals(ZERO)) return 0;
        else if(s.equals(ONE)) return 1;
        else if(s.equals(TWO)) return 2;
        else if(s.equals(THREE)) return 3;
        else if(s.equals(FOUR)) return 4;
        else if(s.equals(FIVE)) return 5;
        else if(s.equals(SIX)) return 6;
        else if(s.equals(SEVEN)) return 7;
        else if(s.equals(EIGHT)) return 8;
        else if(s.equals(NINE)) return 9;

        return -1;
    }
}
출처

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

0개의 댓글