JAVA/프로그래머스 코딩테스트 입문

[프로그래머스, LV.0] 영어가 싫어요

sundori 2024. 12. 11. 16:45

목차

    문제 설명

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


    제한사항

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

     

    import java.util.*;
    class Solution {
        public long solution(String numbers) {
            // 숫자 단어와 숫자를 매핑하는 Map
            Map<String, String> numberWords = Map.of(
                "zero", "0",
                "one", "1",
                "two", "2",
                "three", "3",
                "four", "4",
                "five", "5",
                "six", "6",
                "seven", "7",
                "eight", "8",
                "nine", "9"
            );
    
            // 결과를 저장할 StringBuilder
            StringBuilder result = new StringBuilder();
    
            // 문자열 탐색을 위한 인덱스 관리
            int start = 0;
            while (start < numbers.length()) {
                for (Map.Entry<String, String> entry : numberWords.entrySet()) {
                    String word = entry.getKey();
                    String digit = entry.getValue();
    
                    // 현재 위치에서 단어가 일치하는지 확인
                    if (numbers.startsWith(word, start)) {
                        result.append(digit); // 숫자 추가
                        start += word.length(); // 단어 길이만큼 이동
                        break;
                    }
                }
            }
    
            return Long.parseLong(result.toString()); // 최종 결과 반환 (Long 사용)
        }
    }

    1. 숫자 단어 매핑

    • 숫자 단어와 대응하는 정수를 매핑하기 위해 Map을 사용한다.
    • 예: "one" → "1", "two" → "2", ..., "nine" → "9".

    2. 문자열 탐색

    • 입력 문자열을 왼쪽에서 오른쪽으로 탐색하며 숫자 단어를 확인한다.
    • 탐색은 startsWith 메서드를 이용하여 현재 위치에서 단어가 일치하는지 판단한다.

    3. 숫자 변환 및 저장

    • 일치하는 숫자 단어가 발견되면 해당 숫자를 결과 문자열에 추가한다.
    • 단어가 처리되면 start 인덱스를 단어 길이만큼 이동시켜 다음 부분을 탐색한다.

    4. 결과 반환

    • 탐색이 완료되면 결과 문자열에 누적된 숫자를 Long 타입으로 변환하여 반환한다.
    • Long을 사용하여 큰 숫자도 처리할 수 있도록 설계되었다.
    728x90