영어가 싫은 머쓱이는 영어로 표기되어 있는 숫자를 수로 바꾸려고 합니다. 문자열
numbers
가 매개변수로 주어질 때,numbers
를 정수로 바꿔 return 하도록 solution 함수를 완성해 주세요.
numbers
는 소문자로만 구성되어 있습니다.numbers
는 "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" 들이 공백 없이 조합되어 있습니다.- 1 ≤
numbers
의 길이 ≤ 50- "zero"는
numbers
의 맨 앞에 올 수 없습니다.
numbers | result |
---|---|
"onetwothreefourfivesixseveneightnine" | 123456789 |
"onefourzerosixseven" | 14067 |
class Solution {
public long solution(String numbers) {
String answer = null;
long ans = 0;
String [] numOfEng =
{"zero","one","two","three","four","five","six","seven"
,"eight", "nine"};
int [] n = {0,1,2,3,4,5,6,7,8,9};
String str = null;
for(int i = 0; i < numbers.length(); i++)
{
if(i == 0) str = numbers.substring(i, i+1);
else str = str.concat(numbers.substring(i, i+1));
for(int j = 0; j < num.length; j++)
{
if(str.equals(numOfEng[j])) {
if(answer == null) {
answer = String.valueOf(n[j]);
if(answer.equals("0"))
answer = "";
}
else answer = answer.concat(String.valueOf(n[j]));
str = "";
}
}
}
ans = Long.parseLong(answer);
return ans;
}
}
정말 다소 복잡한 풀이 과정인 것 같긴 하지만...
💡 먼저 for문 내에서 i가 0일 때, 즉, 맨 처음에는 numbers의 맨 첫 글자를 str에 그냥 바로 넣어 주며 맨 처음이 아닐 때는 무조건 한 글자씩 잘라서 concat()을 이용해 병합시켜 준다
💡 중첩 for문은 str을 위한 건데, concat()을 통해 이어진 문자들이 배열 numOfEng에 있는 원소들 중 하나와 같다면 answer에 배열 n에서 알맞은 숫자를 찾아서 String으로 바꿔 준 후 concat()으로 이어지게 해 주며 만약에 answer가 null인 상태라면 그냥 바로 대입해 준다 하지만 4번 제한 사항에 따라 0이 제일 앞에 올 수 없으므로 answer에 제일 먼저 들어간 것이 0이라면 answer을 아무것도 없는 상태로 초기화시켜 준다
💡 숫자들이 문자 형태로 다 이어지게 되었다면 마지막에 long형 변수인 ans에 answer을 long 형태로 바꾸어 넣어 준 후 return 해 주면 된다
한 번 만에 통과된 게 신기한... 🤩