1 minute read

영어가 싫어요

문제 설명

영어가 싫은 머쓱이는 영어로 표기되어있는 숫자를 수로 바꾸려고 합니다. 문자열 numbers가 매개변수로 주어질 때, numbers를 정수로 바꿔 return 하도록 solution 함수를 완성해 주세요.


제한사항

  • numbers는 소문자로만 구성되어 있습니다.
  • numbers는 “zero”, “one”, “two”, “three”, “four”, “five”, “six”, “seven”, “eight”, “nine” 들이 공백 없이 조합되어 있습니다.
  • 1 ≤ numbers의 길이 ≤ 50
  • “zero”는 numbers의 맨 앞에 올 수 없습니다.

입출력 예

numbers result
“onetwothreefourfivesixseveneightnine” 123456789
“onefourzerosixseven” 14067

입출력 예 설명

입출력 예 #1

  • “onetwothreefourfivesixseveneightnine”를 숫자로 바꾼 123456789를 return합니다.

입출력 예 #2

  • “onefourzerosixseven”를 숫자로 바꾼 14067를 return합니다.

나의 풀이 코드

import java.util.*;
class Solution {
    public long solution(String numbers) {
        long answer = 0;
        //해시맵 설정
        HashMap<String,String> map = new HashMap<String,String>(); //put이 블로그에선 안보이네요. put("zero","0")부터 put("nine","9");까지 넣었습니다. 
        
        //문자 하나씩 문자열 뒤에 붙여서 키에 해당하면 list에 값 add
        String str = "";
        List<String> list = new ArrayList<>();
        for(int i=0; i<numbers.length(); i++){
            str = str.concat(Character.toString(numbers.charAt(i)));
            //System.out.println(str);
            if (map.containsKey(str)){
                //System.out.println("해시맵에 있음.");
                list.add(map.get(str));
                str = "";
            }
        }
        //System.out.println(list);
        String str_list = String.join("", list);
        answer = (Long.parseLong(str_list));
        return answer;
    }
}

배운점

class Solution {
    public long solution(String numbers) {
        return Long.parseLong(
                numbers.replaceAll("zero", "0")
                        .replaceAll("one", "1")
                        .replaceAll("two", "2")
                        .replaceAll("three", "3")
                        .replaceAll("four", "4")
                        .replaceAll("five", "5")
                        .replaceAll("six", "6")
                        .replaceAll("seven", "7")
                        .replaceAll("eight", "8")
                        .replaceAll("nine", "9")
        );
    }
}

다른 사람이 푼 코드이다.

replaceAll메서드를 알았다면 더 빠르게 풀었을것이다.
replace 메서드는 간단한 문자열 대체에 사용되고, replaceAll 메서드는 정규 표현식과 일치하는 모든 문자열을 대체하고 싶을 때 사용한다.

Leave a comment