본문 바로가기
Algorithm/프로그래머스

[프로그래머스] 숫자 문자열과 영단어 / java

by 코딩친구 2021. 7. 9.
반응형

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

 

코딩테스트 연습 - 숫자 문자열과 영단어

네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자

programmers.co.kr

 

 

[ 코드 ]

 

class Solution {
    public int solution(String s) {
        int answer = 0;
        String ans = "";
        String[] eng_num = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
        char[] num = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};

        for(int i=0; i<s.length(); i++){
            for(int j=0; j<10; j++){
                if(s.charAt(i)==num[j]) ans += Integer.toString(j);
                if(i + eng_num[j].length() <= s.length() && 
                   s.substring(i, i + eng_num[j].length()).equals(eng_num[j])) ans += Integer.toString(j);
            }
        }

        answer = Integer.parseInt(ans);

        return answer;
    }
}

 

 

char[] num 배열에 있는 것과 같으면 바로 넣고,

 

아니면

 

String[] eng_num 배열에 있는 것과 일치하고,

substring으로 잘라서 비교하다보니 범위가 넘치는 경우가 생겨 원 길이보다 작아야한다는 조건도 추가해줬다.

 

 

 

 

다른 아주 Simple한 코드가 있어 소개한다.

 

 

[ Simple code ]

 

class Solution {
    public static int solution(String s) {
        String[] arr = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
        for (int i = 0; i < arr.length; i++) {
            if (s.contains(arr[i])) {
                s = s.replaceAll(arr[i], Integer.toString(i));
            }
        }
        return Integer.parseInt(s);
    }
}

 

String을 활용할 때는 contains로 확인하면 아주 쉽다!

또한 replaceAll로 한번에 바꿔줄 수 있다.

 

 

 

 

※ 오늘의 교훈

 

알고 있으면서도 쓰던 것만 쓰다보니 생각이 잘 안난다. 더 활용하도록 하자.

 

메소드

s.contains(arr[i]);

s.replace(arr[i], Integer.toString(i));

반응형