Programmers/JAVA

[ 프로그래머스 ] 숫자 문자열과 영단어 - Java

giggs 2023. 1. 6. 13:31

 

1. 문제 설명

 

 

 


 

 

2. 문제 풀이 핵심이라 생각하는 점

  • 숫자에 대응되는 영단어 처리
  • 영단어를 숫자로 바꾸는 것이므로 변경 방법 생각
  • 0~9까지 10개라는 점 체크 및 형 변환 체크

 

 


 

 

3. 정답 코드 확인 및 활용 메소드 체크

 

 

3-1 : 정답 코드 확인

  • replaceAll() 과 replace를 활용하여 풀이

 

class Solution {
    public int solution(String s) {
        String[] strArr = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
        for(int i = 0; i < strArr.length; i++) {
            s = s.replaceAll(strArr[i], Integer.toString(i));
        }
        return Integer.parseInt(s);
    }
}

 

class Solution {
    public int solution(String s) {
        
        String[] num = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};  
        
        //숫자가 0~9까지 10개로 정해져 있으므로 i<10
        for(int i=0; i<10; i++){
            s = s.replace(num[i], Integer.toString(i));
        }
        
        int answer = Integer.parseInt(s);
        
        return answer;
    }
}

 


 

3-2 : 활용 메소드 체크

  • String.relaceAll(String regex, String replacement) : 대상 문자열을 원하는 문자 값으로 변환
  • String.replace(CharSequence target, CharSequence replacement) : 대상 문자열을 원하는 문자 값으로 변환
  • Integer.toString() : int를 String으로 형 변
  • Integer.parseInt() : String타입의 숫자를 int타입으로 변환

 


 

3-3 : 활용 메소드와 비슷한 메소드 체크

 

 

⊙ replaceAll() 과 replace() 

  • 인자 값의 형태를 보면 CharSequence와 String 이라는 차이점을 볼 수 있습니다.
  • 그리고 replaceAll()의 설명을 보면 regex 라 나와있는데 아시다시피 이것은 "정규 표현식"을 의미하죠
  • 개발을 할 때 역시 정규표현식을 이용하여 많이들 개발을 하는데 replaceAll()은 정규표현식 사용이 가능합니다.

 


 

⊙ toString() 과 String.valueOf()

  • 만약 입력된 문자열이 Null이라면 두 함수의 대응점이 다릅니다.
  • String.valueOf()는 우선 "null"이라는 문자열로 처리합니다.
  • 하지만 Integer.toString()은 "Null PointerException"이라는 오류를 발생시킵니다.
  • 만약 null 조차도 오류가 아닌 문자열로 처리해야 한다면 String.valueOf()를 그 외라면 Integer.toString()을 사용하면 됩니다.

 


 

⊙parse의 종류

  • Byte.parseByte();
  • Short.parseShort();
  • Integer.parseInt();
  • Long.parseLong();
  • Float.parseFloat();
  • Double.parseDouble();
  • char는 parseChar()가 아니라  charAt()
  • boolean은 없다.

 

 


 

4. 공부하고 싶은 다른 분의 풀이

  • 이차원 배열과 향상된 for문으로 가독성 좋게 풀어내셨다.
  • 대응이라는 부분을 생각할떄 참고해야겠다.

 

class Solution {
    public int solution(String s) {

        String[][] mapArr = { {"0", "zero"}, 
                              {"1", "one"}, 
                              {"2", "two"}, 
                              {"3", "three"}, 
                              {"4", "four"}, 
                              {"5", "five"}, 
                              {"6", "six"}, 
                              {"7", "seven"}, 
                              {"8", "eight"}, 
                              {"9", "nine"} };

        for(String[] map : mapArr){
            s = s.replace(map[1], map[0]);
        }

        int answer = Integer.parseInt(s);
        return answer;
    }
}