문제풀이
class Solution {
public int solution(String s) {
int answer = 0;
String str="";
String intStr="";
String result="";
for(int i =0;i<s.length();i++){
str=s.substring(i,i+1);
boolean isNumeric = str.matches("[+-]?\\d*(\\.\\d+)?");//숫자 정규식 검증 "^[0-9]*$"
if(isNumeric==false){
intStr+=str;
switch(intStr) { // case 여러개 작성!
case "zero": result+="0"; intStr="";break;
case "one": result+="1"; intStr="";break;
case "two": result+="2"; intStr="";break;
case "three": result+="3"; intStr="";break;
case "four": result+="4"; intStr="";break;
case "five": result+="5"; intStr="";break;
case "six": result+="6"; intStr="";break;
case "seven": result+="7"; intStr="";break;
case "eight": result+="8"; intStr="";break;
case "nine": result+="9"; intStr="";break;
}
}else{
result+=str;
intStr="";
}
}
answer=Integer.parseInt(result);
return answer;
}
}
문제를 읽고 저는 3단계로 나누어 생각했습니다.
1.문자열을 잘라서 숫자인지 영어인지 확인한다.
2.영어라면 숫자로 바꾸어준다, 문자열이 숫자라면 바로 저장.
3. 문자열을 숫자로 바꾸어 리턴한다.
String str="";
String intStr="";
String result="";
처음 입력단어(String s)를 넣을 String str을 선언 해줍니다.
조건문에서 substring해서 자른 str을 넣은 intStr을 선언 해줍니다.
최종으로 모든 영단어를 숫자로 바꾼 return 해줄 String result를 선언해줍니다.
for(int i =0;i<s.length();i++){
str=s.substring(i,i+1);
boolean isNumeric = str.matches("[+-]?\\d*(\\.\\d+)?");//숫자 정규식 검증 "^[0-9]*$"
if(isNumeric==false){
intStr+=str;
switch(intStr) { // case 여러개 작성!
case "zero": result+="0"; intStr="";break;
case "one": result+="1"; intStr="";break;
case "two": result+="2"; intStr="";break;
case "three": result+="3"; intStr="";break;
case "four": result+="4"; intStr="";break;
case "five": result+="5"; intStr="";break;
case "six": result+="6"; intStr="";break;
case "seven": result+="7"; intStr="";break;
case "eight": result+="8"; intStr="";break;
case "nine": result+="9"; intStr="";break;
}
}else{
result+=str;
intStr="";
}
}
그리고 입력 단어의 길이 (s.length()) 만큼 반복문을 돌립니다.
문자열의 하나하나를 잘라서 선언해 준 Str에 넣어줍니다.
그리고 str을 정규식을 이용해 숫자인지 검증해 줍니다. 정규식은 ("^[0-9]*$") 이것으로 바꾸어도 됩니다.
그리고 이게 숫자가 아니라면 false를 반환하기 때문에 isNumeric이 false 일 때의 조건문을 넣어서
선언해 준 영단어가 담길 intStr에 넣어줍니다.
그리고 이것은 switch 문으로 걸러서 최종 리턴할 reslut에 영단에 맞는 숫자를 넣어줍니다.
이러면 if 문은 isNumeric이 문자열일 때 조건문이 걸려서 result에 숫자가 들어가고
else는 isNumeric이 숫자일 때(true) 들어옵니다.
이러면 바로 result에 str을 넣어주고 intStr을 초기화 시켜줍니다.
초기화 시켜주는 이유는 s = "one4seveneight" 일 때 intStr에는 4가 들어가 있기 때문에 다음 반복문에서도 4가 들어가 있는 채로 4s, 4se, 4sev 이렇게 되기 때문에 switch 문에 걸리지 않아 숫자를 반환할 수 없게 됩니다.
answer=Integer.parseInt(result);
return answer;
이렇게 s의 길이 만큼 반복문이 끝나면 문자열이 숫자로 바뀐 String result를 int형 변수 asnwer에 형변화을 시켜 answer을 리턴 해주면 됩니다.
문제출처
https://programmers.co.kr/learn/courses/30/lessons/81301
'ps' 카테고리의 다른 글
[알고리즘] 문자 찾기 (0) | 2022.06.27 |
---|---|
[programmers] 신고 결과 받기 (0) | 2022.05.10 |
[programmers] 신규 아이디 추천 (2) | 2022.05.10 |
[programmers] 하샤드 수 (0) | 2022.05.09 |
상위 n개 레코드 (0) | 2022.05.09 |
댓글