목차
문제 설명
영어가 싫은 머쓱이는 영어로 표기되어있는 숫자를 수로 바꾸려고 합니다. 문자열 numbers가 매개변수로 주어질 때, numbers를 정수로 바꿔 return 하도록 solution 함수를 완성해 주세요.
제한사항
- numbers는 소문자로만 구성되어 있습니다.
- numbers는 "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" 들이 공백 없이 조합되어 있습니다.
- 1 ≤ numbers의 길이 ≤ 50
- "zero"는 numbers의 맨 앞에 올 수 없습니다.
numbers | result |
"onetwothreefourfivesixseveneightnine" | 123456789 |
"onefourzerosixseven" | 14067 |
import java.util.*;
class Solution {
public long solution(String numbers) {
// 숫자 단어와 숫자를 매핑하는 Map
Map<String, String> numberWords = Map.of(
"zero", "0",
"one", "1",
"two", "2",
"three", "3",
"four", "4",
"five", "5",
"six", "6",
"seven", "7",
"eight", "8",
"nine", "9"
);
// 결과를 저장할 StringBuilder
StringBuilder result = new StringBuilder();
// 문자열 탐색을 위한 인덱스 관리
int start = 0;
while (start < numbers.length()) {
for (Map.Entry<String, String> entry : numberWords.entrySet()) {
String word = entry.getKey();
String digit = entry.getValue();
// 현재 위치에서 단어가 일치하는지 확인
if (numbers.startsWith(word, start)) {
result.append(digit); // 숫자 추가
start += word.length(); // 단어 길이만큼 이동
break;
}
}
}
return Long.parseLong(result.toString()); // 최종 결과 반환 (Long 사용)
}
}
1. 숫자 단어 매핑
- 숫자 단어와 대응하는 정수를 매핑하기 위해 Map을 사용한다.
- 예: "one" → "1", "two" → "2", ..., "nine" → "9".
2. 문자열 탐색
- 입력 문자열을 왼쪽에서 오른쪽으로 탐색하며 숫자 단어를 확인한다.
- 탐색은 startsWith 메서드를 이용하여 현재 위치에서 단어가 일치하는지 판단한다.
3. 숫자 변환 및 저장
- 일치하는 숫자 단어가 발견되면 해당 숫자를 결과 문자열에 추가한다.
- 단어가 처리되면 start 인덱스를 단어 길이만큼 이동시켜 다음 부분을 탐색한다.
4. 결과 반환
- 탐색이 완료되면 결과 문자열에 누적된 숫자를 Long 타입으로 변환하여 반환한다.
- Long을 사용하여 큰 숫자도 처리할 수 있도록 설계되었다.
728x90
'JAVA > 프로그래머스 코딩테스트 입문' 카테고리의 다른 글
[프로그래머스, LV.0] 구슬을 나누는 경우의 (0) | 2024.12.12 |
---|---|
[프로그래머스, LV.0] 삼각형의 완성조건 (2) (0) | 2024.12.12 |
[프로그래머스, LV.0] 문자열 계산하기 (0) | 2024.12.11 |
[프로그래머스, LV.0] 공 던지기 (0) | 2024.12.11 |
[프로그래머스, LV.0] 잘라서 배열로 저장하기 (0) | 2024.12.11 |