영어가 싫은 머쓱이는 영어로 표기되어있는 숫자를 수로 바꾸려고 합니다. 문자열 numbers가 매개변수로 주어질 때, numbers를 정수로 바꿔 return 하도록 solution 함수를 완성해 주세요.
numbers | result |
---|---|
"onetwothreefourfivesixseveneightnine" | 123456789 |
"onefourzerosixseven" | 14067 |
import java.util.HashMap;
class Solution {
public long solution(String numbers) {
HashMap<String, Integer> num = new HashMap<>();
String[] numbersStr = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
int[] numbersInt = {0,1,2,3,4,5,6,7,8,9};
for(int i=0; i<numbersInt.length; i++){
num.put(numbersStr[i], numbersInt[i]);
}
String txt = "";
String ans = "";
for(int i=0; i<numbers.length(); i++){
txt += numbers.charAt(i);
if(num.containsKey(txt)){
ans += num.get(txt);
txt = "";
}
}
long answer = Long.valueOf(ans);
return answer;
}
}
class Solution {
public long solution(String numbers) {
String[] numbersStr = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
for (int i = 0; i < numbersStr.length; i++) {
numbers = numbers.replaceAll(numbersStr[i], String.valueOf(i));
}
long answer = Long.valueOf(numbers);
return answer;
}
}
HashMap을 사용해서 문자-수 조합으로 만들었다.
반복문을 사용해서 numbers문자열의 글자를 하나씩 txt에 더해주었다. 그리고 조건문으로 txt가 HashMap 키에 있으면 그걸 수로 바꾸고 다시 txt는 초기화하도록 했다.
그리고 마지막으로 문자를 long 타입으로 바꾸어주었다.
long 타입 ans로 하면 조건문에서 +=을 이어붙이기가 아니라 plus 해버리기 때문에.. String 타입으로 ans을 만들었다.
replaceAll을 통해 문자열 전체에서 해당 단어를 숫자 문자열로 바꾼다.
replaceAll이 있다..는 걸 기억하도록 ㅜㅜ !!