영어가 싫어요

Wook·2024년 10월 5일

🧩코딩테스트

목록 보기
43/46
post-thumbnail

문제

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

조건

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

예시

numbersresult
"onetwothreefourfivesixseveneightnine"123456789
"onefourzerosixseven"14067

풀이

  • 숫자와 숫자를 나타내는 영어 단어가 서로 대응되므로 {key : value} 엔트리를 가지는 Map을 생각해볼 수 있다.
  • Map.of( ) 메서드를 활용하여 필요한 값을 한 번에 입력해준다.
  • key값들을 모은 map.keySet( )과 for-each문을 활용해 하나씩 순회하며 key값이 문자열이 포함되어 있다면 value값으로 대체한다. -> replaceAll(String s1, String s2)
  • 마지막으로 String 타입을 Long 타입으로 변환하여 반환한다.
  • 또는 배열의 element와 index값이 서로 대응될 수 있다는 점에서 착안하여 숫자를 나타내는 영어단어를 모은 배열과, index값을 String 타입으로 변환한 값을 활용하여 대체할 수 있다.

코드

import java.util.Map;

public class EnglishToNumber {

    public long solution(String numbers) {
        Map<String, String> map = Map.of("zero","0","one","1","two","2","three","3","four","4","five","5",
                "six","6","seven","7","eight","8","nine","9");

        for (String s : map.keySet()) {
            numbers = numbers.replaceAll(s, map.get(s));
        }
        return Long.parseLong(numbers);
    }

    public long solution2(String numbers) {
        String[] arr = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};

        for (int i = 0; i < arr.length; i++) {
            numbers = numbers.replaceAll(arr[i], String.valueOf(i));
        }
        return Long.parseLong(numbers);
    }
}
profile
Keep going

0개의 댓글