Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags more
Archives
Today
Total
관리 메뉴

luke

[프로그래머스] - 숫자 문자열과 영단어 (자바/Java) 본문

알고리즘문제/프로그래머스(Java)

[프로그래머스] - 숫자 문자열과 영단어 (자바/Java)

luke-king 2024. 6. 4. 20:31

 

 

 

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/81301

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

 

 

 

 

 

 

문제.


 

 

 

 

 

 

 

풀이.


 

class Solution {
    public int solution(String s) {
        String[] split = s.split("");
        String[] word = {"zero", "one", "two", "three", "four", "five", "six",
                "seven", "eight", "nine"};
        String[] num = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
        int answer = 0;
        String res = "";
        String tot = "";
        
        
         for (int i = 0; i < split.length; i++) {
            res += split[i];

            for (int j = 0; j < word.length; j++) {

                if (res.equals(word[j])) {
                    tot += res.replaceAll(word[j], num[j]);
                    res = "";
                }

                if (res.equals(num[j])){
                    tot += num[j];
                    res = "";
                }

                }

            }
         answer = Integer.parseInt(tot);
        
        return answer;
    }
}

 

오늘 문제는 프로그래머스 " 숫자 문자열과 영단어 " 문제다.

이번 문제는 까다로우면서도 크게 어렵지 않았던 문제다. 다만 문제를 풀면서 replaceAll() 함수에 대해 다시 한번 알게 된 문제다.

문제 설명은 입력받은 문자열을 단어에 일치할경우 단어는 숫자로 숫자는 숫자 그대로 출력하는 문제다.

그럼 바로 문제 풀이를 해보겠다.

 

1. 문자열 변수 res, tot 2개를 만들어 준다. word 배열 (단어), num 배열 (숫자) 도 만들어 준다.

 

2. 입력받은 문자를 split()함수를 사용해 한 문자씩 끊어준다.

 

3. 반복문을 통해 res변수에 split[i] 를 더해줘 2번째 반복문에 res변수가 word배열 값과 일치할 경우 word 배열의 순서 인덱스를 replaceAll() 함수를 통해 num배열 인덱스와 일치하게 바꿔 tot 변수에 담아준다.

 

4. 일치하다면 res 변수는 다시 빈 값으로 초기화 해주고 다시 일치한 값들을 비교한다.

 

5. answer 은 숫자타입 이기에 문자열로 받은 결과값을 숫자 타입으로 형변환 해준다. 그럼 끝이다.!

 

 

이렇게 문제를 풀면서 코드가 지저분하고 조금 더 깔끔한 코드는 없을까 라는 의문점을 가졌다.

그렇게 고민해보고 찾아보니 replaceAll() 함수를 제대로 활용하지 못했다는 걸 알게 되었다.

밑에 새로운 답을 작성해 뒀으니 봐보자.

 

class Solution {
    public int solution(String s) {
        String[] word = {"zero", "one", "two", "three", "four", "five", "six",
                "seven", "eight", "nine"};
        String[] num = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
        int answer = 0;
        
        for (int i = 0; i < word.length; i++) {
            s = s.replaceAll(word[i], num[i]);
        }
        answer = Integer.parseInt(s);
        
        return answer;
    }
}