숫자 문자열과 영단어 문제

정병웅·2025년 9월 23일
0

알고리즘 스터디

목록 보기
18/18

HashMap을 사용하여 영문에 대응하는 숫자 문자열로 치환 하는 처리 흐름을 파악하기 위한 의도인거같다.

요구사항

네오와 프로도가 숫자놀이를 하고 있습니다.
네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.
다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.
1478 → "one4seveneight"
234567 → "23four5six7"
10203 → "1zerotwozero3"
이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다.

접근방법

  1. 영문에 대응하는 숫자를 저장하기 위해서 해시맵을 사용
  2. 해시맵에서 제공하는 API 중에서 entrySet 사용하여 변환

실패 포인트

  1. 해시맵에서 제공하는 API가 익숙하지 않아 반복문 내에서 대응하는 값을 뽑아내는게 쉽지 않음
for (Map.Entry<String, String> entry : hashMap.entrySet()) 
{
  text = text.replace(entry.getKey(), entry.getValue());
}
  • 반복문의 조건
    해시맵에 저장되어 있는 key, value 쌍의 값들을 한 쌍씩 꺼내어서 entry 변수에 담아 반복 실행하겠다는 의미
hashMap = { "zero"="0", "one"="1", "two"="2" }

entrySet() = [
   Entry("zero","0"),
   Entry("one","1"),
   Entry("two","2")
]

for문 돌면서 entry는 순서대로
1회전: entry = ("zero","0")
2회전: entry = ("one","1")
3회전: entry = ("two","2")
  • replace(바꾸려는 대상 값, 바꿀 값)
    replace 는 내부적으로 indexOf, subString을 처리하도록 되어있음.
    따라서 문자열에 바꾸려는 대상 값을 찾게 되면 바꿀 값으로 치환하고,
    치환 값 이후로 인덱스 탐색을 실행함.

최종 코드

문제 풀이 Git

profile
인생은 IT 노가다

0개의 댓글