코딩 테스트

(Java) 프로그래머스 숫자 문자열과 영단어

로승리 2021. 11. 27. 04:51

문제를 보고 한 글자씩 다 잘라서 만드는 것 말고는 다른 방법이 떠오르지 않았다.

split를 이용해서 한글자씩 자르고 리스트로 변환한다.

그리고 switch / case로 원하는 문자열이 만들어지면 임시 배열인 sb에 넣고 sb를 int로 변환해 리턴한다.

다른 분 코드를 보니 replaceAll을 사용해서 간단하게 풀었는데 왜 저 생각을 못했지...?


최종 코드

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class Solution {
    public int solution(String s) {
        int answer = 0;
        // answer로 변환하기 전 String 변수
        String sb = new String();
        // s를 배열로 변환후 리스트로 변환
        String[] temp = s.split("");
        List<String> list = new ArrayList<>(Arrays.asList(temp));

        // 문자열을 판단하기 위한 변수
        String a = new String();
        
        while(!list.isEmpty()) {
            for (int i = 0; i < list.size(); i++) {
                // a에 한글자씩 더해서 문자열 만들기
                a += list.get(0);
                // 사용한 문자 지우기
                list.remove(0);
                switch (a) {
                    case "zero":
                    case "0":
                        sb += 0;
                    a = ""; break;
                    case "one":
                    case "1":
                        sb += 1;
                    a = ""; break;
                    case "two":
                    case "2":
                        sb += 2;
                    a = ""; break;
                    case "three":
                    case "3":
                        sb += 3;
                    a = ""; break;
                    case "four":
                    case "4":
                        sb += 4;
                    a = ""; break;
                    case "five":
                    case "5":
                        sb += 5;
                    a = ""; break;
                    case "six":
                    case "6":
                        sb += 6;
                    a = ""; break;
                    case "seven":
                    case "7":
                        sb += 7;
                    a = ""; break;
                    case "eight":
                    case "8":
                        sb += 8;
                    a = ""; break;
                    case "nine":
                    case "9":
                        sb += 9;
                    a = ""; break;
                }
            }
        }
        answer = Integer.parseInt(sb);
        return answer;
    }
}

 

다른 분 코드

class Solution {
    public int solution(String s) {
        String[] strArr = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
        for(int i = 0; i < strArr.length; i++) {
            s = s.replaceAll(strArr[i], Integer.toString(i));
        }
        return Integer.parseInt(s);
    }
}