문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/81301
이 문제는 HashMap을 이용하여 풀 수 있습니다. 문제에서 주어진 표를 {문자 : 숫자} 형태로 HashMap에 저장합니다. 이후 입력받은 문자열을 하나씩 읽어나가면서 앞 글자가 문자일 경우 StringBuilder에 저장해서 저장된 값이 표에 존재할 경우 숫자를 리턴하고 숫자일 경우 그대로 정답에 추가하는 방식으로 구현하면 쉽게 풀 수 있습니다.
다음은 코드입니다.
import java.util.*;
class Solution {
public int solution(String s) {
// 맵 이용해서 문자 : 숫자 세팅
Map<String, Integer> req = new HashMap<>();
req.put("zero",0);
req.put("one",1);
req.put("two",2);
req.put("three",3);
req.put("four",4);
req.put("five",5);
req.put("six",6);
req.put("seven",7);
req.put("eight",8);
req.put("nine",9);
// 앞에서부터 하나씩 읽음
StringBuilder sb = new StringBuilder();
StringBuilder res = new StringBuilder();
for(int i=0;i<s.length();i++){
int curr = s.charAt(i)-'0';
// 숫자면 바로 answer에 추가
if(curr>=0 && curr<=9) res.append(curr);
// 문자면 주어진 값이 나올때까지 계속 읽음
else sb.append(s.charAt(i));
// 주어진 값이 나오면 해당 값으로 대체
if(req.containsKey(sb.toString())){
int val = req.get(sb.toString());
res.append(val);
sb = new StringBuilder();
}
}
int answer = Integer.parseInt(res.toString());
return answer;
}
}