금일은 알고리즘 문제를 여러 개 풀었는데 그 중 이 문제가 인상이 깊어서 가져왔다.
코딩테스트 연습 - 숫자 문자열과 영단어 | 프로그래머스 스쿨 (programmers.co.kr)
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
해당 문제는 영어와 숫자가 섞여있는 문자열을 한 번에 숫자로 바꾸는 문제였는데
package algorithm2;
public class C01 {
public static void main(String[] args) {
String s = new String("one4seveneight" );
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
if(!Character.isDigit(s.charAt(i))){
if(s.charAt(i) == 'z' && s.charAt(i+2)=='r'){
sb.append('0');
i +=3;
}else if(s.charAt(i) == 'o' && s.charAt(i+2) == 'e'){
sb.append('1');
i +=2;
}else if(s.charAt(i) == 't' && s.charAt(i+2) == 'o'){
sb.append('2');
i +=2;
}else if(s.charAt(i) == 't' && s.charAt(i+2) == 'r'){
sb.append('3');
i +=4;
}else if(s.charAt(i) == 'f' && s.charAt(i+2) == 'u'){
sb.append('4');
i +=3;
}else if(s.charAt(i) == 'f' && s.charAt(i+2) == 'v'){
sb.append('5');
i +=3;
}else if(s.charAt(i) == 's' && s.charAt(i+2) == 'x'){
sb.append('6');
i +=2;
}else if(s.charAt(i) == 's' && s.charAt(i+2) == 'v'){
sb.append('7');
i +=4;
}else if(s.charAt(i) == 'e' && s.charAt(i+2) == 'g'){
sb.append('8');
i +=4;
}else if(s.charAt(i) == 'n' && s.charAt(i+2) == 'n'){
sb.append('9');
i +=3;
}
}
else{
sb.append(s.charAt(i));
}
}
int answer = Integer.valueOf(sb.toString());
System.out.println(answer);
}
}
본인은 이렇게 다소 노가다 적인 방법으로 문제를 풀고 다른 이들의 문제풀이 방식을 보니
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);
}
}
정말 깔끔하게 replaceAll이라는 함수를 활용해 문제를 해결하였다.
이런 식으로 활용할 수 있는 함수의 풀이 적은 것 같아 노력해야겠다고 생각했다.
'TIL' 카테고리의 다른 글
| [TIL]2023-08-21 (0) | 2023.08.21 |
|---|---|
| [TIL]2023-08-19 (0) | 2023.08.19 |
| [TIL]2023-08-17 (0) | 2023.08.17 |
| [TIL]2023-08-16 (0) | 2023.08.16 |
| [TIL]2023-08-15 (0) | 2023.08.15 |