네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.
다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.
1478 → "one4seveneight"
234567 → "23four5six7"
10203 → "1zerotwozero3"
이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.
class Solution {
public int solution(String s) {
int answer = 0;
String[] words = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
String word = ""; //현재 읽고있는 단어를 저장할 변수
for (char c : s.toCharArray()) {
if (Character.isDigit(c)) { //숫자인지 여부 확인, 숫자면 true
answer = answer * 10 + Character.getNumericValue(c); //*10 은 자릿수를 올리는 역할
} else {
word += c; //word에 영단어 입력
for (int i = 0; i < words.length; i++) {
if (word.equals(words[i])) { //현재까지 읽은 영단어가 배열에 있는지 확인
answer = answer * 10 + i;
word = "";
}
}
}
}
return answer;
}
}
-> map 버전
import java.util.HashMap;
import java.util.Map;
class Solution {
public int solution(String s) {
int answer = 0;
Map<String, Integer> number = new HashMap<>();
number.put("zero", 0);
number.put("one", 1);
number.put("two", 2);
number.put("three", 3);
number.put("four", 4);
number.put("five", 5);
number.put("six", 6);
number.put("seven", 7);
number.put("eight", 8);
number.put("nine", 9);
String Word = ""; //현재 읽고있는 단어를 저장할 변수
for (char c : s.toCharArray()) { //문자열 순회
if (Character.isDigit(c)) { //c가 숫자인지 확인, 숫자면 true
answer = answer * 10 + Character.getNumericValue(c); // 자릿수를 올리는 역할
} else {
Word += c;
if (number.containsKey(Word)) { // 현재까지 읽은 영단어가 매핑되어 있는지 확인
answer = answer * 10 + number.get(Word); //Word를 숫자로 변환하여 계산
Word = ""; // 초기화
}
}
}
return answer;
}
}
->StringBuilder 버전
import java.util.HashMap;
import java.util.Map;
class Solution {
public int solution(String s) {
int answer = 0;
Map<String, Integer> number = new HashMap<>();
number.put("zero", 0);
number.put("one", 1);
number.put("two", 2);
number.put("three", 3);
number.put("four", 4);
number.put("five", 5);
number.put("six", 6);
number.put("seven", 7);
number.put("eight", 8);
number.put("nine", 9);
StringBuilder Word = new StringBuilder(); //현재까지 읽은 영단어를 저장, StringBuilder는 문자열을 동적으로 조작하는 데 사용됨
for(char c : s.toCharArray()) { //문자열 순회
if(Character.isDigit(c)) { //숫자인지 여부 확인, 숫자면 true
answer = answer * 10 + Character.getNumericValue(c); //자릿수를 올리는 역할
} else {
Word.append(c); //append는 StringBuilder에서 문자열을 추가하는 메서드
if(number.containsKey(Word.toString())) { //현재까지 읽은 영단어가 매핑되어 있는지 확인
answer = answer * 10 + number.get(Word.toString()); //맵에서 Word에 해당하는 키 반환
Word = new StringBuilder(); //초기화
}
}
}
return answer;
}
}
StringBuilder 예제
StringBuilder stringBuilder = new StringBuilder();
// 문자열 추가
stringBuilder.append("Hello");
// 문자열 연결
stringBuilder.append(" World");
// 문자열 삭제
stringBuilder.delete(5, 10); // "HelloWorld"에서 인덱스 5부터 9까지의 문자를 삭제
// 문자열 변경
stringBuilder.replace(0, 5, "Hi"); // "HiWorld"
// 결과 출력
System.out.println(stringBuilder.toString()); // 출력 결과: HiWorld