본문 바로가기

Java/코딩테스트

[java/프로그래머스/120894] 영어가 싫어요 (HashMap, String.valueOf(), Long.parseLong())

✏️ 문제 설명

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

 


✏️ code 1차

📌 HashMap
HashMap의 key : value를 활용하여 문제를 풀어보았습니다만, 다소 복잡했습니다.
public class P120894 {
    public long solution(String numbers) {
        HashMap<String, Integer> map = new HashMap<>();
        String arr[] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
        for (int i = 0; i < 10; i++) {
            map.put(arr[i], i);
        }

        int index = 0;
        StringBuilder result = new StringBuilder();
        while (index < numbers.length()) {
            for (String key : map.keySet()) {
                if (numbers.startsWith(key, index)) {
                    result.append(map.get(key));
                    index += key.length();
                    break;
                }
            }
        }

        long answer = Long.parseLong(result.toString());
        return answer;
    }
}

✏️ code 2차

📌 replaceAll
replaceAll을 활용하여 더 쉽게 풀어보았습니다.
i = 0인 경우, numbers = numbers.replaceAll("zero", "0")이 될 수 있도록 String.valueOf(i)로 작성하였습니다.

📌 long result = Long.parseLong(numbers)
numbers의 길이가 50으로, int의 범위를 벗어나 테스트케이스 오류가 발생하기 때문에 long으로 변환해 return 했습니다.
class Solution {
    public long solution(String numbers) {
        String arr2[] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
        for (int i = 0; i < arr2.length; i++) {
            numbers = numbers.replaceAll(arr2[i], String.valueOf(i));
        }
        long result = Long.parseLong(numbers);
        return result;
    }
}

 


 

반응형