학습/프로그래머스

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

태기 2023. 2. 2. 18:55

문제

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

 

프로그래머스

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

programmers.co.kr


나의 풀이

class Solution {
    public int solution(String s) {
        int answer = 0;
        String[] number = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };

        for (int i = 0; i < number.length; i++) {
            if (s.contains(number[i])) {
                s = s.replaceAll(number[i], "" + i);
            }
        }
        answer = Integer.parseInt(s);

        return answer;
    }
}

zero ~ nine까지 s 문자열에 있는지 확인하고 있으면 알맞은 숫자로 바꿔준다. 단순히 반복문이라서 선형이라 생각할 수 있지만, number 배열은 고정된 객체이고 입력에 따라 변하지 않기 때문에 증가 차수가 상수이다.

 

반복문 내부에 있는 contains 메서드가 선형이고 그 안에 문자열을 바꿔주는 replaceAll 메서드도 마찬가지로 선형이다. 이 반복문은 2O(n)의 시간 복잡도를 가지고 있고 따라서 선형이다.