문제 링크
숫자 문자열과 영단어
풀이
class Solution {
public int solution(String s) {
StringBuilder answer = new StringBuilder();
char[] chars = s.toCharArray();
StringBuilder word = new StringBuilder();
for (char c : chars) {
if(checkNumber(c)){
answer.append(c);
} else {
word.append(c);
if (!convertor(word.toString()).isEmpty()) {
answer.append(convertor(word.toString()));
word = new StringBuilder();
}
}
}
return Integer.parseInt(answer.toString());
}
public boolean checkNumber(char s) {
return Character.isDigit(s);
}
public String convertor(String s) {
switch (s) {
case "one":
return "1";
case "two":
return "2";
case "three":
return "3";
case "four":
return "4";
case "five":
return "5";
case "six":
return "6";
case "seven":
return "7";
case "eight":
return "8";
case "nine":
return "9";
case "zero":
return "0";
}
return "";
}
}
소감
- 생각나는 대로 했으니 switch-case를 사용해서 하게 되었다.
- 문제를 푼 뒤에 볼 수 있는 다른 사람들 풀이는 생각하지도 못한 방법이었다.
replaceAll
과 두 개의 String 배열을 통해서 for문으로 돌려서 풀다니..
import java.util.*;
class Solution {
public int solution(String s) {
int answer = 0;
StringBuilder sb = new StringBuilder("");
int len = s.length();
String[] digits = {"0","1","2","3","4","5","6","7","8","9"};
String[] alphabets = {"zero","one","two","three","four","five","six","seven","eight","nine"};
for(int i=0; i<10; i++){
s = s.replaceAll(alphabets[i],digits[i]);
}
return Integer.parseInt(s);
}
}