[프로그래머스]영어가 싫어요
영어가 싫어요
문제 설명
영어가 싫은 머쓱이는 영어로 표기되어있는 숫자를 수로 바꾸려고 합니다. 문자열 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 |
입출력 예 설명
입출력 예 #1
- “onetwothreefourfivesixseveneightnine”를 숫자로 바꾼 123456789를 return합니다.
입출력 예 #2
- “onefourzerosixseven”를 숫자로 바꾼 14067를 return합니다.
나의 풀이 코드
import java.util.*;
class Solution {
public long solution(String numbers) {
long answer = 0;
//해시맵 설정
HashMap<String,String> map = new HashMap<String,String>(); //put이 블로그에선 안보이네요. put("zero","0")부터 put("nine","9");까지 넣었습니다.
//문자 하나씩 문자열 뒤에 붙여서 키에 해당하면 list에 값 add
String str = "";
List<String> list = new ArrayList<>();
for(int i=0; i<numbers.length(); i++){
str = str.concat(Character.toString(numbers.charAt(i)));
//System.out.println(str);
if (map.containsKey(str)){
//System.out.println("해시맵에 있음.");
list.add(map.get(str));
str = "";
}
}
//System.out.println(list);
String str_list = String.join("", list);
answer = (Long.parseLong(str_list));
return answer;
}
}
배운점
class Solution {
public long solution(String numbers) {
return Long.parseLong(
numbers.replaceAll("zero", "0")
.replaceAll("one", "1")
.replaceAll("two", "2")
.replaceAll("three", "3")
.replaceAll("four", "4")
.replaceAll("five", "5")
.replaceAll("six", "6")
.replaceAll("seven", "7")
.replaceAll("eight", "8")
.replaceAll("nine", "9")
);
}
}
다른 사람이 푼 코드이다.
replaceAll메서드를 알았다면 더 빠르게 풀었을것이다.
replace 메서드는 간단한 문자열 대체에 사용되고, replaceAll 메서드는 정규 표현식과 일치하는 모든 문자열을 대체하고 싶을 때 사용한다.
Leave a comment