import java.util.*;
class Solution {
static Map<String,String> sn = new HashMap<>();
static String[] ss = {"zero","one","two","three","four","five","six","seven","eight","nine"};
public int solution(String s) {
StringBuilder sb = new StringBuilder();
for(int i = 0; i< ss.length; i++){
sn.put(ss[i],Integer.toString((i)));
}
String number = "0123456789";
for(int i =0; i< s.length(); i++){
String c = Sting.valueOf(s.charAt(i));
if(number.contains(c)){
sb.append(c);
}else{
String a = "";
int start = i;
int end = i;
while(sn.get(a)==null){
end++;
a = s.substring(start,end);
}
sb.append(sn.get(a));
i = end-1;
}
}
return Integer.parseInt(sb.toString());
}
}
먼저 바보 같은 내 풀이 이다. 이 풀이를 보면 바보같이 문자열을 하나하나 바꾸고 있다 또한 while 문을 사용해서 숫자를 교환했다. 하지만 새로운 풀이를 보면
import java.util.*;
class Solution {
static String[] ss = {"zero","one","two","three","four","five","six","seven","eight","nine"};
public int solution(String s) {
for(int i = 0; i < ss.length; i++){
s = s.replaceAll(ss[i], Integer.toString(i));
}
return Integer.parseInt(s);
}
}
이런 식으로 아주 쉽게 코딩이 가능하다.
String replace 를 까먹지 말아야겠다.
그리고 진법 변환에 필요한 아주 좋은 Integer class 의 api 가 있어서 설명하려한다.
메서드
Integer.parseInt(String s,int redix). - radix 진법으로 숫자를 표현하는 문자열 s를 정수로 변환한다.
2진법 문자열 1111,2 -> 15
Integer.toString(int v, int radix) - 정수 v 를 radix 진법의 문자열로 변환
15 ,2 -> 1111
Long.parseLong(String s, int radix) - radix 진법으로 숫자를 표현하는 문자열 s 를 정수로 변환한다.
Long.toString(long v, int radis) - 정수 v를 radix 진법의 문자열로 변환