본문 바로가기

TIL

[TIL]2023-08-18

금일은 알고리즘 문제를 여러 개 풀었는데 그 중 이 문제가 인상이 깊어서 가져왔다.

코딩테스트 연습 - 숫자 문자열과 영단어 | 프로그래머스 스쿨 (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