문자열을 입력받아서 숫자로 변환
문자열을 앞에서 한글자씩 잘라서 숫자랑 매칭되면 바꾸면 되겠네!?
String을 length로 for문으로 index로 substring 하면서 난리부루스를 치려다가 귀찮고 짜증나서 Queue에 넣고 다시 빼야지로 결정
Input | output |
---|---|
one4seveneight | 1478 |
23four5six7 | 234567 |
2three45sixseven | 234567 |
123 | 123 |
- Map에다가 스트링, 숫자 매핑을 모두 넣는다. (1=1, one=1, two=2, 2=2,...)
- 입력받은 스트링을 잘라서 Queue에 넣는다.
- Queue에서 하나씩 꺼내면서
- Map에 있으면 결과(result)에 포함
- Map에 없으면 Queue에서 다음글자 꺼내서 다시 검사
public class Programmers01 {
public static HashMap<String, String> map;
public static void main(String args[]) {
initMap();
System.out.println(convert("one4seveneight"));
System.out.println(convert("23four5six7"));
System.out.println(convert("2three45sixseven"));
System.out.println(convert("123"));
}
private static void initMap() {
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");
map.put("0", "0");
map.put("1", "1");
map.put("2", "2");
map.put("3", "3");
map.put("4", "4");
map.put("5", "5");
map.put("6", "6");
map.put("7", "7");
map.put("8", "8");
map.put("9", "9");
}
public static String convert(String input) {
String[] arr = input.split("");
Queue<String> queue = new LinkedList<>(List.of(arr));
String result = "";
String key = "";
while (!queue.isEmpty()) {
key += queue.poll();
if (map.containsKey(key)) {
result += map.get(key);
key = "";
}
}
return result;
}
}
1478
234567
234567
123
다른 사람 풀이보니까 대부분 replace 를 loop돌려서 해결한 것 같은데,
나는 쓸데없이 좀 복잡하게 처리 한 것 같다.
class Solution {
public int solution(String s) {
String[] strArr = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
for(int i = 0; i < strArr.length; i++) {
s = s.replaceAll(strArr[i], Integer.toString(i));
}
return Integer.parseInt(s);
}
}