숫자 일부 자릿수가 영단어로 바뀌어진 가능성이 있는 문자열 s가 매개변수로 주어질 때, s가 의미하는 원래 숫자를 return하는 solution 함수를 작성하는 문제이다.
문자열을 처음부터 끝까지 탐색하며 charAt()이 char 타입이면 letter_to_digit함수를 호출해 0~9 사이의 문자들을 숫자로 바꾸는 작업을 해주었다. 중복되는 문자가 있어도 이후에 탐색되기 때문에 모두 변환할 수 있다.
이 문제를 해결하면서 아래 함수들을 새로 알게 되었다.
Character.isLetter(char a)
a가 문자인지 숫자인지 판별하는 함수로 문자면 true를 반환
Character.isDigit(char a)
a가 숫자면 true를 반환
String.indexOf(String str)
String 내에서 str의 index를 찾아서 반환, str이 String 내에 존재하지 않으면 -1을 반환
class Solution {
public int solution(String s) {
int answer = 0;
for(int i=0; i<s.length(); i++) {
if (Character.isLetter(s.charAt(i))) { // char 타입이면
s = letter_to_digit(s);
}
}
answer = Integer.parseInt(s);
return answer;
}
private static String letter_to_digit(String s) {
String[] numbers = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"};
for (int i = 0; i < numbers.length; i++) {
int index = s.indexOf(numbers[i]);
if (index != -1) {
s = s.substring(0, index) + i + s.substring(index+numbers[i].length());
}
}
return s;
}
}