Skip to main content

[Java] 81301 숫자 문자열과 영단어


1. 문제

숫자 문자열과 영단어


2. 정답코드

import java.util.*;

class Solution {
    public int solution(String s) {
        // HashMap에 숫자랑 영단어 담기
        // 한 마디로 노가다 문제
        HashMap<String, String> map = new HashMap<>();
        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");
        
        
        // 맵에 있는 키를 실제 숫자 문자열로 치환하기
        for (String key : map.keySet()) {
            s = s.replaceAll(key, map.get(key));
        }
        
        return Integer.parseInt(s);
    }
}
  1. map.keySet()
    1. map에 담겨 있는 모든 key(영단어)를 꺼내온 집합
    2. 여기서 map.keySet()은 ["one", "two", "three"] 가 된다.
  2. for (String key : map.keySet())
    1. 키 집합을 하나씩 돌면서 key 변수에 할당한다.
    2. 첫 번째 루프 → key = "one"
    3. 두 번째 루프 → key = "two"
    4. 세 번째 루프 → key = "three"
  3. s.replaceAll(key, map.get(key))
    1. replaceAll은 문자열 안에서 key에 해당하는 부분을 모두 찾아서 map.get(key) 값으로 바꾼다.
  4. replaceAll은 원본 문자열을 수정하는게 아니라 새로운 문자열 반환하므로 꼭 변수에 넣어서 반환해야 한다.

주의할 점

HashMap 객체 선언할 때 value값이 숫자라서 처음에 <String, Integer>로 잘못 설정함
숫자라도 문자열로 치환해야 되기 때문에 숫자를 ""로 감싸서 <String,String>으로 선언해야 한다.