1hours
- 영단어와, 숫자쌍의 hashmap 만들기
- 받은 문자열의 문자를 하나씩 돌면서 검사하기
- 받은 문자열의 문자가 숫자라면 -> 그대로 정답 Stringbuilder에 추가하기
- 받은 문자열의 문자가 문자라면 -> target문자열 StringBuilder에 추가하기
- for문이 한번 돌 때마다, target문자열이 hashmap의 key값에 존재하는 지 검사하기
- 존재한다면, key값에 해당하는 value를 빼내서 정답 Stringbuilder에 추가하고, setLength(0)를 이용해서
StringBuilder 초기화- 존재하지 않는다면 다음 for문 돌리기
import java.util.HashMap;
/**
* 2021 카카오 채용연계형 인턴쉽_숫자문자열과영단어
*/
public class Solution {
public static void main(String[] args) {
String s = "one4seveneight";
int result = solution(s);
System.out.println(result);
}
public static int solution(String s) {
HashMap<String, Integer> dic = new HashMap<String, Integer>() {{
put("zero", 0);
put("one", 1);
put("two", 2);
put("three", 3);
put("four", 4);
put("five", 5);
put("six", 6);
put("seven", 7);
put("eight", 8);
put("nine", 9);
}};
StringBuilder str_answer = new StringBuilder();
StringBuilder target = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
if (Character.isDigit(s.charAt(i))) {
str_answer.append(s.charAt(i));
} else {
target.append(s.charAt(i));
if (dic.containsKey(String.valueOf(target))) {
str_answer.append(dic.get(String.valueOf(target)));
target.setLength(0);
}
}
}
int answer = Integer.parseInt(String.valueOf(str_answer));
return answer;
}
}
- 받은 문자가 숫자인지 문자인지 판별할 때는 Character의
isDigit()
함수를 활용해보자- StringBuilder를 초기화 시킬 때는
setLength(0)
을 활용해보자
- delete도 있지만, 객체를 새로 생성해서 지워내는 delete보다는 단순히 길이를 0으로 만들어 초기화시키는 setLength(0)의 효율이 더 좋다.
대부분 replaceAll()
을 썼다.
import java.util.*;
class Solution {
public int solution(String s) {
int answer = 0;
int len = s.length();
String[] digits = {"0","1","2","3","4","5","6","7","8","9"};
String[] alphabets = {"zero","one","two","three","four","five","six","seven","eight","nine"};
for(int i=0; i<10; i++){
s = s.replaceAll(alphabets[i],digits[i]);
}
return Integer.parseInt(s);
}
}
뭐지..? 굉장히 간단하다.
String replaceAll(String regex, String replacement)
세상에... 이런 게 있었고 나는 몰랐다니.. 멍청했따...