본문 바로가기

컴퓨터/프로그래머스

프로그래머스 - 81301번: 숫자 문자열과 영단어 [Java]

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

 

프로그래머스

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

programmers.co.kr

1. 코드

class Solution {
    public int solution(String s) {
        String[] number = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
        String temp = "";
        while(!s.isBlank()) {
            if(s.matches("^[0-9](.*)")) {
                temp += s.charAt(0);
                s = s.substring(1);
            }
            else {
                for(int i = 0; i < number.length; i++) {
                    if(s.indexOf(number[i]) == 0) {
                        temp += i + "";
                        s = s.substring(number[i].length());
                        break;
                    }
                }
            }
        }
        return Integer.parseInt(temp);
    }
}

2. 설명

String[] number = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
String temp = "";

먼저 숫자에 대응되는 영단어를 배열로 만들어줍니다.

while(!s.isBlank()) {
    if(s.matches("^[0-9](.*)")) {
        temp += s.charAt(0);
        s = s.substring(1);
    }

문자열이 공백이 될 때까지 반복하는데 정규식을 이용하여 문자열의 시작이 숫자로 시작되는지 확인한 뒤 만약 숫자로 시작되는 문자열이라면 해당 문자를 temp에 추가하고 문자열의 길이를 1만큼 줄여 저장합니다.

    else {
        for(int i = 0; i < number.length; i++) {
            if(s.indexOf(number[i]) == 0) {
                temp += i + "";
                s = s.substring(number[i].length());
                break;
            }
        }
    }
}

문자열이 숫자로 시작되지 않으면 어떠한 영단어로 시작하는지 확인한 뒤 시작되는 영단어에 대한 숫자를 문자열로 temp에 추가한 뒤 영단어에 해당하는 부분을 제거하여 s에 저장합니다.

return Integer.parseInt(temp);

문자열 s가 공백이 되면 문자열 temp에 저장된 값을 10진수 정수형으로 변환하면 문제는 해결됩니다.

3. 정리

  1. 숫자에 대응되는 문자열을 배열을 통해서 저장한다.
  2. 정규식을 통해서 문자열 s의 시작부분이 숫자인지 문자인지 확인한다.
  3. 만약 숫자로 시작된다면 해당 숫자를 임의의 String 변수에 저장하고 문자열 s의 첫번째 요소를 제거한다.
  4. 만약 영단어로 시작된다면 어느 문자열로 시작되는지 확인한 뒤 해당 문자열을 임의의 String 변수에 저장한 뒤 해당 문자열을 문자열 s에서 제거한다.
  5. (추가) 다른 사람들은 replaceAll()메서드를 활용하여 쉽게 해결하였다.

 

출처: 프로그래머스 코딩 테스트 연습, 
https://school.programmers.co.kr/learn/challenges