
https://school.programmers.co.kr/learn/courses/30/lessons/120894
내 풀이대로 가려면 v 변수는 널을 대비하여 Integer로 가야 한다.
반복문을 뭘 쓸지 고민했으나 단순 for문으로 충분하다 생각하여 그리 했다.
과정의 순서를 틀려서 오답을 맛봤다.
one에만 그치는 실패를 했다. 그리고 리턴타입이 long이라는 점도 꼼꼼이 봐야 한다.
내가 맞춘 코드
import java.util.*;
class Solution {
public long solution(String numbers) {
// 찾을때까지 sb에 계속 더한다. map에서 null이 아닌 값이 나오면 결과 문자열에 append하고 마지막에
// 정수형으로 parse하여 리턴한다.
Map<String, Integer> map = new HashMap<>();
map.put("zero", 0);
map.put("one", 1);
map.put("two", 2);
map.put("three", 3);
map.put("four", 4);
map.put("five", 5);
map.put("six", 6);
map.put("seven", 7);
map.put("eight", 8);
map.put("nine", 9);
StringBuilder sb = new StringBuilder();
StringBuilder result = new StringBuilder();
for(char c : numbers.toCharArray()) {
sb.append(c);
Integer v = map.get(sb.toString());
if(v != null) {
result.append(v);
sb = new StringBuilder();
}
}
return Long.parseLong(result.toString());
}
}
더 간결한 코드
class Solution {
public long solution(String numbers) {
String[] words = {
"zero","one","two","three","four",
"five","six","seven","eight","nine"
};
for (int i = 0; i < 10; i++) {
numbers = numbers.replaceAll(words[i], String.valueOf(i));
}
return Long.parseLong(numbers);
}
}