Programmers/Lv.0

[프로그래머스][Lv.0][Java][Map] 영어가 싫어요

dbssk 2023. 3. 17. 02:16

문제 설명

영어가 싫은 머쓱이는 영어로 표기되어있는 숫자를 수로 바꾸려고 합니다. 문자열 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

풀이

import java.util.Map;

class Solution {
    public long solution(String numbers) {
        long answer = 0;
        String str = "";
        String result = "";
        
        // Map에 Key와 value 추가
        Map<String, String> map = Map.of (
            "zero", "0",
            "one", "1",
            "two", "2",
            "three", "3",
            "four", "4",
            "five", "5",
            "six", "6",
            "seven", "7",
            "eight", "8",
            "nine", "9"
        );
        
        // numbers를 한 글자씩 나누면서 str에 더해주고, 
        // 만약 map의 key에 같은 값이 있으면 result에 저장하고 str을 빈 문자열로 초기화 해준다.
        for (int i = 0; i < numbers.length(); i++) {
            str += numbers.substring(i, i+1);
            if (map.containsKey(str)) {
                result += map.get(str);
                str = "";
            }
        }
        
        // String 형태의 result를 Long형으로 변환
        answer = Long.parseLong(result);
        return answer;
    }
}