[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);
}
}
- map.keySet()
- map에 담겨 있는 모든 key(영단어)를 꺼내온 집합
- 여기서 map.keySet()은 ["one", "two", "three"] 가 된다.
- for (String key : map.keySet())
- 키 집합을 하나씩 돌면서 key 변수에 할당한다.
- 첫 번째 루프 → key = "one"
- 두 번째 루프 → key = "two"
- 세 번째 루프 → key = "three"
- s.replaceAll(key, map.get(key))
- replaceAll은 문자열 안에서 key에 해당하는 부분을 모두 찾아서 map.get(key) 값으로 바꾼다.
- replaceAll은 원본 문자열을 수정하는게 아니라 새로운 문자열 반환하므로 꼭 변수에 넣어서 반환해야 한다.
주의할 점
HashMap 객체 선언할 때 value값이 숫자라서 처음에 <String, Integer>로 잘못 설정함
숫자라도 문자열로 치환해야 되기 때문에 숫자를 ""로 감싸서 <String,String>으로 선언해야 한다.