ps

[programmers] 숫자 문자열과 영단어

수수한개발자 2022. 5. 10.
728x90

 

 

 

 

문제풀이

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

 

728x90

'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

댓글