문제
영어가 싫은 머쓱이는 영어로 표기되어있는 숫자를 수로 바꾸려고 합니다. 문자열 numbers가 매개변수로 주어질 때, numbers를 정수로 바꿔 return 하도록 solution 함수를 완성해 주세요.
제한사항
- numbers 는 소문자로만 구성되어 있습니다.
- numbers 는 "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" 들이 공백 없이 조합되어 있습니다.
- 1 ≤ numbers 의 길이 ≤ 50
- "zero"는 numbers 의 맨 앞에 올 수 없습니다.
import java.util.HashMap;
class Solution {
public long solution(String numbers) {
String answer = "";
String num = "";
HashMap<String, String> alphaNum = new HashMap<String, String>();
alphaNum.put("zero", "0");
alphaNum.put("one", "1");
alphaNum.put("two", "2");
alphaNum.put("three", "3");
alphaNum.put("four", "4");
alphaNum.put("five", "5");
alphaNum.put("six", "6");
alphaNum.put("seven", "7");
alphaNum.put("eight", "8");
alphaNum.put("nine", "9");
for(int i = 0; i < numbers.length(); i++) {
num += numbers.charAt(i);
if(alphaNum.containsKey(num)) {
answer += alphaNum.get(num);
num = "";
}
}
return Long.parseLong(answer);
}
}
HashMap 의 장점으로 시간복잡도가 O(1) 인 점을 이용했다.
배열을 이용하면 검색하는데 O(n)이 걸리니 단순한 문제라 하더라도 Map을 익힐 겸 사용했다. 사실 배열을 사용해야겠다는 생각을 못했다. 빠른 검색만을 생각하다보니 그만 머쓱;;
출처
https://school.programmers.co.kr/learn/courses/30/lessons/120894