영어가 싫은 머쓱이는 영어로 표기되어있는 숫자를 수로 바꾸려고 합니다. 문자열 numbers가 매개변수로 주어질 때, numbers를 정수로 바꿔 return 하도록 solution 함수를 완성해 주세요.
여러 번 형변환을 거치면서 그다지 효율적으로 풀이한 것 같지는 않다 ㅜ
문자열을 잘라 String[] 형태로 반환 받은 뒤, 루프를 돌며 StringBuffer 객체에 누적, 만약 해당 문자열이 zero~nine 중 하나와 일치한다면 다른 StringBuffer 객체에 영어에 해당하는 숫자를 append() 해주었다. 그리고 setLength() 메서드를 통해 첫 번째 버퍼 객체를 초기화 해주었다.
그리고 루프를 돌며 모든 누적 작업이 끝나면 Long.parseLong()으로 파싱한 다음 반환해 주었다. 메모리/시간 상의 효율을 위해 String이 아니 버퍼 객체를 사용했는데, 2개의 객체를 사용하다 보니 더 정신이 없었던 것 같다.
class Solution {
public long solution(String numbers) {
String[] numbersArr = numbers.split("");
StringBuffer n = new StringBuffer();
StringBuffer num = new StringBuffer();
for(int i=0; i<numbersArr.length; i++){
n.append(numbersArr[i]);
if(n.toString().equals("zero")){
num.append("0");
n.setLength(0);
}else if(n.toString().equals("one")){
num.append("1");
n.setLength(0);
}else if(n.toString().equals("two")){
num.append("2");
n.setLength(0);
}else if(n.toString().equals("three")){
num.append("3");
n.setLength(0);
}else if(n.toString().equals("four")){
num.append("4");
n.setLength(0);
}else if(n.toString().equals("five")){
num.append("5");
n.setLength(0);
}else if(n.toString().equals("six")){
num.append("6");
n.setLength(0);
}else if(n.toString().equals("seven")){
num.append("7");
n.setLength(0);
}else if(n.toString().equals("eight")){
num.append("8");
n.setLength(0);
}else if(n.toString().equals("nine")){
num.append("9");
n.setLength(0);
}
}
return Long.parseLong(num.toString());
}
}
