반응형
프로그래머스 숫자 문자열과 영단어 - JAVA
문제 설명
- 일부 자릿수를 영단어로 바꾼 카드를 건네주면 원래 숫자를 찾는다.
- 일부 자릿수가 영단어로 바뀌어졌거나, 그대로인 문자열 s가 주어짐.
제한 사항
- 1 ≤ s의 길이 ≤ 50
- s가 "zero" 또는 "0"으로 시작하는 경우는 주어지지 않습니다.
- return 값이 1 이상 2,000,000,000 이하의 정수가 되는 올바른 입력만 s로 주어집니다.
문제 풀이
- 치환할 숫자에 대응하는 영단어 배열을 생성.
- 문자열에서 존재하는 영단어를 replace() 함수를 사용하여 숫자 문자열로 치환.
- 숫자로만 이루어진 문자열을 정수로 변경하여 리턴.
class Solution {
public int solution(String s) {
String[] numbers = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
for (int i = 0; i < numbers.length; i++) {
s = s.replace(numbers[i], String.valueOf(i));
}
return Integer.parseInt(s);
}
}
번외
아래에는 replace를 통해 문자열이 계속 재생성되기 때문에 메모리 공간 낭비가 심할 수도 있다 생각하여, 문자열을 순회하며 숫자가 아닌경우 문자열을 추출한뒤 숫자로 변경하는 방법을 통해 구현해보았다.
하지만 메모리도 비슷하게 사용되며 시간은 1.2배 정도 더 걸려 이 문제의 제한사항에는 그리 효율적이지 않다.
import java.util.*;
class Solution {
public int solution(String s) {
Map<String, Integer> map = new HashMap<>();
map.put("zero", 0); map.put("one", 1); map.put("two", 2);
map.put("three", 3); map.put("four", 4); map.put("five", 5);
map.put("six", 6); map.put("seven", 7); map.put("eight", 8); map.put("nine", 9);
StringBuilder temp = new StringBuilder();
StringBuilder sb = new StringBuilder();
for (char c : s.toCharArray()) {
if (Character.isDigit(c))
sb.append(c);
else temp.append(c);
if (map.containsKey(temp.toString())) {
sb.append(map.get(temp.toString()));
temp.setLength(0);
}
}
return Integer.parseInt(sb.toString());
}
}
반응형
'알고리즘(Algorithm) > 프로그래머스(Programmers)' 카테고리의 다른 글
[프로그래머스] 소수 만들기 - JAVA (0) | 2021.10.19 |
---|---|
[프로그래머스] 없는 숫자 더하기 - JAVA (0) | 2021.10.19 |
[프로그래머스] 수박수박수박수박수박수? - JAVA (0) | 2021.10.19 |
[프로그래머스] 나머지가 1이 되는 수 찾기 - JAVA (0) | 2021.10.19 |
[프로그래머스] 문자열 다루기 기본 - JAVA (0) | 2021.10.18 |