코딩테스트

[코딩테스트(Java)] 프로그래머스 81301 숫자 문자열과 영단어

inhooo00 2025. 3. 13. 14:28

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

public int solution(String s) {
    int answer = 0;
    String answerString = "";
    String string = "";
    for (int i = 0; i < s.length(); i++) {

        switch (string) {
            case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9":
                answerString += string;
                string = "";
                i--;
                break;
            case "zero":
                answerString += "0";
                string = "";
                i--;
                break;
            case "one":
                answerString += "1";
                string = "";
                i--;
                break;
            case "two":
                answerString += "2";
                string = "";
                i--;
                break;
            case "three":
                answerString += "3";
                string = "";
                i--;
                break;
            case "four":
                answerString += "4";
                string = "";
                i--;
                break;
            case "five":
                answerString += "5";
                string = "";
                i--;
                break;
            case "six":
                answerString += "6";
                string = "";
                i--;
                break;
            case "seven":
                answerString += "7";
                string = "";
                i--;
                break;
            case "eight":
                answerString += "8";
                string = "";
                i--;
                break;
            case "nine":
                answerString += "9";
                string = "";
                i--;
                break;
            default:
                string += s.charAt(i);
                System.out.println(string);
                break;
        }
    }

    switch (string) {
        case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9":
            answerString += string;
            break;
        case "zero":
            answerString += "0";
            break;
        case "one":
            answerString += "1";
            break;
        case "two":
            answerString += "2";
            break;
        case "three":
            answerString += "3";
            break;
        case "four":
            answerString += "4";
            break;
        case "five":
            answerString += "5";
            break;
        case "six":
            answerString += "6";
            break;
        case "seven":
            answerString += "7";
            break;
        case "eight":
            answerString += "8";
            break;
        case "nine":
            answerString += "9";
            break;
        default:
            break;
    }

    answer = Integer.parseInt(answerString);

    return answer;
}

처음에 그냥 1차원적으로 생각해서 풀었는데 시간 복잡도 관점에서만 유리하고 뭔가 다른 방법이 많을 것 같아서 다른 방법으로 다시 풀었다.

 

public int solution(String s) {
    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);
}

 

📍포인트

1. 띄어쓰기 없는 문자열을 어떻게 처리해야할지 고민.
2. 다양한 매핑 방법 중에 무엇을 사용할지 고민. ex) switch, replace, map 등등..