숫자 문자열과 영단어
역시 다양한 메서드를 연습해봐야해😂
- 알고리즘 공부를 하면서 메서드를 쪼개고, 테스트를 작성해보는 연습을 많이 해보려고 한다.
- 또한 else를 절대 쓰지않고, 들여쓰기를 최소화하는 노력을 하고있다.
- 머릿속에서 그림이 잘 안그려지면, 일단 구현해보자 하는 때가 더 많기는 하지만..
문제를 처음 봤을 때, 어제 푼 문제랑 큰 차이가 없을 것이라고 생각했었다.
- 어찌 됐든,
map
과 stringbuilder
로 구현하면 쉽겠다고 생각했고, 그렇게 구현을 성공하기는 했다.
- 하지만 나만의 목표는 거의 성공시키지못했음ㅎ
- 아래는 제가 작성한 코드입니다.
import java.util.Map;
public class numberStringAndWords {
static Map<String, Integer> numberMap = Map.of("zero", 0,
"one", 1,
"two", 2,
"three", 3,
"four", 4,
"five", 5,
"six", 6,
"seven", 7,
"eight", 8,
"nine", 9);
static int solve(String s) {
StringBuilder answer = new StringBuilder();
StringBuilder chars = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (isNum(c)) {
answer.append(c);
} else {
chars.append(c);
if (isStringNum(chars.toString())) {
answer.append(numberMap.get(chars.toString()));
chars.delete(0,chars.length()-1);
}
}
}
return Integer.parseInt(answer.toString());
}
private static boolean isNum(char c) {
return c >= '0' && c <= '9';
}
private static boolean isStringNum(String str) {
return str.length() >= 3 && numberMap.containsKey(str);
}
- 풀이를 완료하고, 다른 사람의 코드를 보는데 .... 괜히 억울한 기분
- 아래의 코드는 프로그래머스 최상단 풀이를 참고하여 작성하였습니다.
static String[] numbers = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
static int string2int(String str) {
for (int i = 0; i < numbers.length; i++) {
str = str.replace(numbers[i], Integer.toString(i));
}
return Integer.parseInt(str);
}
- 다시 한번,
String.replace()
의 활용을 생각하게 되었다.