<사전 생각>
기존 문자열이 변하는 과정이 빈번하게 일어나기 때문에 StringBuffer를 사용하는 것이 효과적이라는 사실을 생각해야 했고 제일 중요한 해당 문자열에서 알파벳으로 들어온 숫자를 탐색하는 방법은 String의 indexOf()를 활용 할 생각을 하고 문제를 풀었다.
<중간 문제점>
1. 단순히 if문 10번(0~10)을 쓸 생각을 했었는데 동일한 작업이면 조금더 고민해서 한번의 코드로 바꾸는 게 좋을 것 같다.
2. 12four3four 같이 같은 문자가 여러번 들어올 수도 있는데 이를 간과하고 짜서 런타임 에러가 발생했다.
<최종 코드>
class Solution {
// 시간 복잡도 O(1) 공간 복잡도 O(1)
private String engSearchChange(String s){
StringBuffer sForm = new StringBuffer(s);
String[] num = {"zero","one","two","three","four","five","six","seven","eight","nine"};
for(int i=0;i<10;i++){
while(sForm.indexOf(num[i])!=-1)
sForm.replace(sForm.indexOf(num[i]),
sForm.indexOf(num[i])+num[i].length(), Integer.toString(i));
}
return sForm.toString();
}
public int solution(String s) {
String tmp = engSearchChange(s);
int answer = Integer.parseInt(tmp);
return answer;
}
// 가장 극찬 받은 풀이의 코드
public int solution2(String s) {
String alp[] = {"zero","one","two","three","four","five","six","seven","eight","nine"};
String digit[] = {"0","1","2","3","4","5","6","7","8","9"};
for(int i=0;i<10;i++){
s.replaceAll(alp[i],digit[i]);
}
return Integer.parseInt(s);
}
}
<메모>
StringBuffer을 무조건 적으로 쓰기보다는 좀 더 효율적으로 사용할 수 있는 함수는 없는가? 더 고민해봐야 할 것 같다
String.replace(str, str);
<링크>
https://school.programmers.co.kr/learn/courses/30/lessons/81301
'PS > Level1' 카테고리의 다른 글
Programmers School level 1: 신규 아이디 추천 (0) | 2023.01.24 |
---|---|
Programmers School level 1: 성격 유형 검사하기 (1) | 2023.01.22 |
Programmers School level 1: 신고 결과 받기 (1) | 2023.01.20 |
Programmers School level 1: 키패드 누르기 (0) | 2023.01.16 |
Programmers School: 개인정보 수집 유효기간 (0) | 2023.01.14 |