문제는 다음과 같다:
주어진 문자열에서 숫자가 일부 영단어로 표현되어 있다. 이 문자열을 숫자 문자열로 변환해야 한다. 예를 들어,
"one4seveneight"
는"1478"
로 변환된다.
예제 입력과 출력은 다음과 같다:
"one4seveneight"
1478
이 문제를 풀기 위해 Java의 Map
자료구조를 사용했다. Map
을 사용하면 영단어와 숫자 간의 매핑을 쉽게 관리할 수 있기 때문에 이 문제를 풀기에 적합한 도구였다.
Map.Entry
와 replace()
메서드를 사용한 해결처음에는 Map.Entry
, getKey()
, getValue()
메서드의 사용 방법이 익숙하지 않아 약간의 혼란이 있었다. 그래서 이 메서드들을 이해하고 활용하는 방법을 중심으로 문제를 풀어보았다.
Map
과 Map.Entry
Map
은 키와 값을 쌍으로 저장하는 자료구조이다. 이 문제에서는 각 영단어를 키로, 그에 대응하는 숫자를 값으로 사용했다. Map.Entry
는 Map
에 저장된 각각의 키-값 쌍을 나타낸다. Map
을 순회하면서 각 영단어를 찾아 숫자로 변환하기 위해 Map.Entry
를 사용했다.
import java.util.HashMap;
import java.util.Map;
public class NumberWordConverter {
public static int solution(String s) {
// 영단어와 대응되는 숫자를 매핑하기 위한 딕셔너리 생성
Map<String, String> numberWords = new HashMap<>();
numberWords.put("zero", "0");
numberWords.put("one", "1");
numberWords.put("two", "2");
numberWords.put("three", "3");
numberWords.put("four", "4");
numberWords.put("five", "5");
numberWords.put("six", "6");
numberWords.put("seven", "7");
numberWords.put("eight", "8");
numberWords.put("nine", "9");
// 딕셔너리의 각 엔트리를 순회하면서 문자열 내의 영단어를 대응되는 숫자로 변환
for (Map.Entry<String, String> entry : numberWords.entrySet()) {
s = s.replace(entry.getKey(), entry.getValue());
}
// 변환된 문자열을 정수로 변환하여 반환
return Integer.parseInt(s);
}
public static void main(String[] args) {
// 테스트 케이스
System.out.println(solution("one4seveneight")); // 예상 출력: 1478
System.out.println(solution("23four5six7")); // 예상 출력: 234567
System.out.println(solution("2three45sixseven")); // 예상 출력: 234567
System.out.println(solution("123")); // 예상 출력: 123
}
}
getKey()
와 getValue()
Map.Entry
를 사용하면 getKey()
와 getValue()
메서드를 통해 키와 값에 접근할 수 있다. 이 메서드들은 각 영단어와 그에 대응하는 숫자를 가져오는 데 사용된다.
getKey()
: Map.Entry
에서 현재 엔트리의 키를 반환한다. 여기서는 영단어가 반환된다.getValue()
: Map.Entry
에서 현재 엔트리의 값을 반환한다. 여기서는 해당 영단어에 대응되는 숫자가 반환된다.이 메서드들을 활용하여 replace()
메서드를 사용해 문자열에서 영단어를 숫자로 변환할 수 있었다.
replace()
메서드replace()
메서드는 문자열 내에서 특정 부분을 다른 문자열로 대체하는 데 사용된다. 이 문제에서는 각 영단어를 그에 대응하는 숫자로 변환하기 위해 replace()
메서드를 사용했다.
for (Map.Entry<String, String> entry : numberWords.entrySet()) {
s = s.replace(entry.getKey(), entry.getValue());
}
이 코드 블록은 주어진 문자열 s
에서 Map
에 저장된 각 영단어를 그에 대응하는 숫자로 대체하는 작업을 수행한다. 이렇게 변환된 문자열은 최종적으로 숫자로 변환되어 반환된다.
이번 문제를 해결하면서 Java에서 Map
을 활용하는 방법을 익힐 수 있었다. 특히 Map.Entry
를 통해 키와 값을 동시에 다루는 방법과 replace()
메서드를 사용해 문자열을 변환하는 방법을 배울 수 있었다. 앞으로 유사한 문제를 해결할 때 Map
을 더욱 효과적으로 사용할 수 있을 것 같다.
문제 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/81301