[2021 카카오 채용연계형 인턴십] 숫자 문자열과 영단어

최민길(Gale)·2023년 4월 10일
1

알고리즘

목록 보기
60/172

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/81301

이 문제는 HashMap을 이용하여 풀 수 있습니다. 문제에서 주어진 표를 {문자 : 숫자} 형태로 HashMap에 저장합니다. 이후 입력받은 문자열을 하나씩 읽어나가면서 앞 글자가 문자일 경우 StringBuilder에 저장해서 저장된 값이 표에 존재할 경우 숫자를 리턴하고 숫자일 경우 그대로 정답에 추가하는 방식으로 구현하면 쉽게 풀 수 있습니다.

다음은 코드입니다.

import java.util.*;

class Solution {
    public int solution(String s) {
        // 맵 이용해서 문자 : 숫자 세팅
        Map<String, Integer> req = new HashMap<>();
        req.put("zero",0);
        req.put("one",1);
        req.put("two",2);
        req.put("three",3);
        req.put("four",4);
        req.put("five",5);
        req.put("six",6);
        req.put("seven",7);
        req.put("eight",8);
        req.put("nine",9);
        
        // 앞에서부터 하나씩 읽음
        StringBuilder sb = new StringBuilder();
        StringBuilder res = new StringBuilder();
        
        for(int i=0;i<s.length();i++){
            int curr = s.charAt(i)-'0';
            // 숫자면 바로 answer에 추가
            if(curr>=0 && curr<=9) res.append(curr);
            // 문자면 주어진 값이 나올때까지 계속 읽음
            else sb.append(s.charAt(i));
            
            // 주어진 값이 나오면 해당 값으로 대체
            if(req.containsKey(sb.toString())){
                int val = req.get(sb.toString());
                res.append(val);
                sb = new StringBuilder();
            }
        }

        int answer = Integer.parseInt(res.toString());
        return answer;
    }
}

profile
저는 상황에 맞는 최적의 솔루션을 깊고 정확한 개념의 이해를 통한 다양한 방식으로 해결해오면서 지난 3년 동안 신규 서비스를 20만 회원 서비스로 성장시킨 Software Developer 최민길입니다.

0개의 댓글