문제 링크 : 숫자 문자열과 영단어
public int solution(String s) {
int answer = 0;
HashMap<String, Integer> map = new HashMap<>();
map.put("zero", 0); map.put("one", 1); map.put("two", 2); map.put("three", 3); map.put("four", 4);
map.put("five", 5); map.put("six", 6); map.put("seven", 7); map.put("eight", 8); map.put("nine", 9);
String tempStr = "";
for(int i = 0; i < s.length(); i++){
if(s.charAt(i) >= '0' && s.charAt(i) <= '9'){
answer = answer * 10 + Integer.parseInt(s.substring(i, i+1));
}else{
tempStr += s.substring(i, i+1);
if(map.get(tempStr) != null){
answer = answer * 10 + map.get(tempStr);
tempStr = "";
}
}
}
return answer;
}
public int solution(String s) {
String[] strArr = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
for(int i = 0; i < strArr.length; i++) {
s = s.replaceAll(strArr[i], Integer.toString(i));
}
return Integer.parseInt(s);
}
내가 문제를 풀때는 Map 자료구조에 영어 단어와 숫자를 맵핑해서 넣고, 문자열이 0~9까지면 그대로 넣고, 영어 단어라면 그 단어를 Map에서 찾아 더한 후 반환하는 형식이다.
하지만 다른 사람들은 replaceAll 함수를 사용해서 문자열값 자체를 변경한 후 그 값을 Int 값으로 변환해서 반환한다.
이 방식을 생각을 못해서 풀이를 보고 상당히 놀랐다.