나의 해설
import java.util.*;
class Solution {
public int solution(String s) {
int answer = 0;
String[] words = {"zero","one","two","three","four","five","six","seven","eight","nine"};
int[] integers = {0,1,2,3,4,5,6,7,8,9};
StringBuffer sb = new StringBuffer();
ArrayList<Integer> temp = new ArrayList<>(); // answer로 바꿀 list
String[] s_array = s.split("");
for(String string : s_array){
try{
int k = Integer.parseInt(string);
temp.add(k); // 숫자라면 temp에 추가
continue;
}
catch(NumberFormatException e){
// 숫자가 아니라면 그냥 넘어감
}
sb.append(string);
if(Arrays.asList(words).contains(sb.toString())){
temp.add(Arrays.asList(words).indexOf(sb.toString()));
sb.setLength(0); // StringBuffer 초기화
}
}
for(int i=0; i<temp.size(); i++){
answer *= 10;
answer += temp.get(i);
}
return answer;
}
}
stringbuffer를 통해 숫자가 아닌 문자열들을 합해가며 반복한다.
합해진 문자열이 words에 포함되는 문자라면 words에 해당하는 문자의 인덱스 번호를 temp에 저장후 sb를 초기화한다.
인덱스 번호 = 해당 문자의 숫자
이후 temp의 길이가 자릿수가 되므로 자릿수만큼 temp에서 구해온 숫자를 더해준다.
answer의 초기값이 0이므로 answer에 그대로 곱하고 더해준다.
모범 답안
=> replaceAll 메소드 사용
import java.util.*;
class Solution {
public int solution(String s) {
int answer = 0;
String[] words = {"zero","one","two","three","four","five","six","seven","eight","nine"};
for(int i=0; i<10; i++){
s = s.replaceAll(words[i],Integer.toString(i);
}
return Integer.parseInt(s); // 문자열을 정수형으로 변환
}
}
String replaceAll(String 변환 대상 문자열, String 변환할 문자 값)
입력 인자의 형이 String이므로 정규표현식을 사용 할 수 있다.
=> replace 함수와의 차이점. replace는 두번 인자가 char. 정규표현식 사용 불가
ex)
String s = "abcaad"
s.replaceAll("a", "good");
결과 >> goodbcgoodgoodd
(참고:https://jamesdreaming.tistory.com/85, https://mine-it-record.tistory.com/127)
'Algorithm > Programmers' 카테고리의 다른 글
[Java | programmers] 정규표현식(regex) (0) | 2023.03.13 |
---|---|
[프로그래머스|최대공약수와 최소공배수] 유클리드 호제법 (0) | 2022.08.31 |
[프로그래머스] 모의고사 (0) | 2022.08.09 |
[프로그래머스]Level2 주식가격<java> (0) | 2022.02.18 |
[프로그래머스]Level2 기능개발 <java> (0) | 2022.02.18 |