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

작성자 : 조회수 :


 소요시간 : 20

프로그래머스 숫자 문자열과 영단어 라는 문제입니다.

 

자료구조는 map을 이용해서 풀었고 String을 스택처럼 사용해서 값을 하나씩 쌓아 나간 후

특정 조건을 만족하면 map에 등록해둔 코드 값으로 검색해 정답을 채워 나가는 방식으로 코드를 짰습니다.

 

 

package Question;

import java.util.HashMap;

/**

 * 프로그래머스 숫자 문자열과 영단어

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

 *

 * */

public class NumberAndString {

    public static void main(String[] args) {

        System.out.println(solution("one4seveneight"));

        System.out.println(solution("23four5six7"));

    }

    public static int solution(String s) {

        int answer = 0;

        StringBuilder answerString = new StringBuilder(); // 반환 할때 변경해줄 예정

        HashMap<String, String> map = new HashMap<>();

        String stackString = "";

        map.put("zero", "0");

        map.put("one", "1");

        map.put("two", "2");

        map.put("three", "3");

        map.put("four", "4");

        map.put("five", "5");

        map.put("six", "6");

        map.put("seven", "7");

        map.put("eight", "8");

        map.put("nine", "9");

        // 문자열 스택 하나씩 쌓을때마다 hashmap 검색 시도 값이 있으면 숫자 반환

        for (int i = 0; i < s.length(); i++) {

            char c = s.charAt(i);

            if(Character.isDigit(c)){

                answerString.append(c);

            }else{

                stackString += s.charAt(i);

            }

            // 모든 글자의 최대 수를 넘었을 검사 진행

            if(stackString.length() > 2){

                String mapData = map.get(stackString);

                if(mapData != null){

                    // 값이 있어서 반환하면 정답에 붙여준후 비우기

                    answerString.append(mapData);

                    stackString = "";

                }

            }

        }

        answer = Integer.parseInt(answerString.toString());

        return answer;

    }

}