본문 바로가기
코딩테스트/자바 Level 0

[Java] 영어가 싫어요

by onggury 2023. 7. 7.

문제

영어가 싫은 머쓱이는 영어로 표기되어있는 숫자를 수로 바꾸려고 합니다. 문자열 numbers가 매개변수로 주어질 때, numbers를 정수로 바꿔 return 하도록 solution 함수를 완성해 주세요.

 

 

제한사항

  • numbers 는 소문자로만 구성되어 있습니다.
  • numbers 는 "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" 들이 공백 없이 조합되어 있습니다.
  • 1 ≤ numbers 의 길이 ≤ 50
  • "zero"는 numbers 의 맨 앞에 올 수 없습니다.

 

import java.util.HashMap;

class Solution {
    public long solution(String numbers) {
        String answer = "";
        String num = "";
        HashMap<String, String> alphaNum = new HashMap<String, String>();
        alphaNum.put("zero", "0");
        alphaNum.put("one", "1");
        alphaNum.put("two", "2");
        alphaNum.put("three", "3");
        alphaNum.put("four", "4");
        alphaNum.put("five", "5");
        alphaNum.put("six", "6");
        alphaNum.put("seven", "7");
        alphaNum.put("eight", "8");
        alphaNum.put("nine", "9");
        
        for(int i = 0; i < numbers.length(); i++) {
            num += numbers.charAt(i);
            if(alphaNum.containsKey(num)) {
                answer += alphaNum.get(num);
                num = "";
            }
        }
        
        return Long.parseLong(answer);
    }
}

HashMap 의 장점으로 시간복잡도가 O(1) 인 점을 이용했다.

배열을 이용하면 검색하는데 O(n)이 걸리니 단순한 문제라 하더라도 Map을 익힐 겸 사용했다. 사실 배열을 사용해야겠다는 생각을 못했다. 빠른 검색만을 생각하다보니 그만 머쓱;;

 

 

출처

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