문제 설명
네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.
다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.
- 1478 → "one4seveneight"
- 234567 → "23four5six7"
- 10203 → "1zerotwozero3"
이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.
1 | one |
2 | two |
3 | three |
4 | four |
5 | five |
6 | six |
7 | seven |
8 | eight |
9 | nine |
숫자와 문자열의 대응은 이러하다
class Solution {
public int solution(String s) {
int answer = 0;
String[] num = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
for (int i = 0; i < num.length; i++) { //num 배열길이만큼 반복한다.
s = s.replace(num[i], Integer.toString(i)); //replace함수를 통해 문자를 정수로 반환.
}
answer = Integer.parseInt(s);
return answer;
}
}
반복문을 통한 변환
for (int i = 0; i < num.length; i++) { s = s.replace(num[i], Integer.toString(i)); }
이 반복문은 num 배열의 각 요소를 순회하면서 문자열 s에서 해당 영단어 숫자를 실제 숫자로 변환합니다.
- s.replace(num[i], Integer.toString(i))는 s 문자열에서 num[i]와 일치하는 모든 부분 문자열을 Integer.toString(i)로 변환합니다.
- 예를 들어, s가 "one4seveneight"이라면 num[0]("zero")는 없기 때문에 넘어가고, num[1]("one")이 "1"로 변환됩니다. 이 과정이 반복됩니다.
정수로 변환
answer = Integer.parseInt(s);
모든 영단어 숫자가 숫자로 변환된 후, s는 숫자만 포함하게 됩니다. Integer.parseInt(s)를 통해 문자열 s를 정수로 변환하고, 그 값을 answer 변수에 저장합니다.
반환
return answer;
최종적으로 변환된 정수를 반환합니다.
전체 코드 동작 방식 예시
예를 들어, 입력 문자열 s가 "one4seveneight"인 경우:
- 초기 문자열: "one4seveneight"
- 첫 번째 반복 (i = 0, "zero"): 변환 없음
- 두 번째 반복 (i = 1, "one"): "1"로 변환되어 "14seveneight"
- 세 번째 반복 (i = 2, "two"): 변환 없음
- 네 번째 반복 (i = 3, "three"): 변환 없음
- 다섯 번째 반복 (i = 4, "four"): 변환 없음
- 여섯 번째 반복 (i = 5, "five"): 변환 없음
- 일곱 번째 반복 (i = 6, "six"): 변환 없음
- 여덟 번째 반복 (i = 7, "seven"): "7"로 변환되어 "147eight"
- 아홉 번째 반복 (i = 8, "eight"): "8"로 변환되어 "1478"
- 열 번째 반복 (i = 9, "nine"): 변환 없음
최종적으로 변환된 문자열 "1478"을 Integer.parseInt로 정수로 변환하여 반환합니다.
따라서, 최종 반환 값은 1478이 됩니다.
'(Java)코테연습' 카테고리의 다른 글
k번째수 (0) | 2024.07.18 |
---|---|
문자열 내 마음대로 정렬하기 (0) | 2024.07.17 |
시저암호 (1) | 2024.07.15 |
영어 단어 맞추기 (0) | 2024.07.12 |
문자열끼리 크기 비교하는 경우 (0) | 2024.07.12 |